try {
new BitSet();
byte[] packetData = new byte[receivePacket.getLength()];
packetData = receivePacket.getData();
bits = BitSet.valueOf(packetData);
byte_header = Arrays.copyOfRange(packetData,0,12);
byte_header_id = Arrays.copyOfRange(byte_header,0,2);
byte_header_flags = Arrays.copyOfRange(byte_header,2,4);
BitSet bits_packetData = BitSet.valueOf(receivePacket.getData());
BitSet bits_header = BitSet.valueOf(byte_header);
BitSet bits_header_flags = BitSet.valueOf(byte_header_flags);
System.out.println("packetData length: " + receivePacket.getLength());
System.out.println("byte_header length: " + byte_header.length);
System.out.println("byte_header_flags length: " + byte_header_flags.length);
System.out.println("bits_packetData length: " + bits_packetData.size());
System.out.println("bits_header length: " + bits_header.size());
System.out.println("bits_header_flags length: " + bits_header_flags.size());
} catch (Exception ex) { ex.printStackTrace(); }
背景:上面是从发送到客户端的UDP数据包中获取数据,并从数据包中提取数据。看似异常的输出如下:
packetData长度:44
byte_header长度:12
byte_header_flags长度:2
bits_packetData长度:384
bits_header长度:64
bits_header_flags长度:64
这里看起来正确的唯一数字是packetData length,byte_header_length和byte_header_flags_length。 packetData字节* 8位不等于384. byte_header_length * 8位不等于64,而byte_header_flags_length * 8位肯定不等于64 !!
任何人都可以澄清我做错了什么,并指出我正确的方向吗?
谢谢!
答案 0 :(得分:0)
BitSet大小方法没有达到预期效果。
BitSet大小实现恰好使用long来保存位。因此,您将看到大小为64的倍数。
BitSet长度方法返回BitSet的逻辑大小。这可能是你应该使用的。