我正在尝试解析我将在套接字上收到的DatagramPacket.我知道我将收到的数据包的格式,这是一个DHCPREQUEST数据包,但我不认为这真的很重要.为简单起见,我们只考虑前六个字段:
第一个字段是“操作码”,它是1个字节.
第二个字段是“硬件类型”,它是1个字节.
三,“硬件地址长度”,1个字节.
第四,“跳”,1个字节.
五,“事务标识符xid”,4个字节.
第六,“秒”,2个字节.
收到数据包后,我的方法是将其转换为字节数组.
DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
socket.receive(request);
byte[] buf = request.getData();
此时,数据包作为一系列字节存储在字节数组buf中.既然我知道这个字节序列的结构是什么,我该如何解析呢?单字节字段很简单,但多位字段怎么样?例如,如何提取字节4到7,并将它们存储在名为xid的变量中?
我可以手动将每个字节放入一个数组:
byte[] xid = new byte[4];
xid[0] = buf[4];
xid[1] = buf[5];
xid[2] = buf[6];
xid[3] = buf[7];
但这对于数百字节长的字段来说是单调乏味的,并且不切实际.给定偏移和长度的String类可以解析子字符串; Java中的字节数组是否有类似的方法?
或者我在某种程度上让自己变得困难?