简体   繁体   English

Java 1.7字节数组到BitSet不起作用

[英]Java 1.7 Byte Array to BitSet not working

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(); }

Background: The above is taking data from a UDP packet sent to the client, and extracting data from the packet. 背景:以上是从发送到客户端的UDP数据包中提取数据,并从该数据包中提取数据。 The seemingly anomalous output is as follows: 看似异常的输出如下:

packetData length: 44 packet数据长度:44
byte_header length: 12 byte_header长度:12
byte_header_flags length: 2 byte_header_flags长度:2
bits_packetData length: 384 bits_packet数据长度:384
bits_header length: 64 bits_header长度:64
bits_header_flags length: 64 bits_header_flags长度:64

The only numbers that look correct on here are the packetData length, byte_header_length, and byte_header_flags_length. 在这里看起来正确的唯一数字是packetData长度,byte_header_length和byte_header_flags_length。 packetData bytes * 8 bits does not equal 384. byte_header_length * 8 bits does not equal 64, and byte_header_flags_length * 8 bits surely does not equal 64!! packetData字节* 8位不等于384。byte_header_length * 8位不等于64,byte_header_flags_length * 8位肯定不等于64!

Can anyone please clarify what I am doing wrong, and point me in the right direction? 谁能澄清我做错了什么,并指出正确的方向吗?

Thanks! 谢谢!

The BitSet size method doesn't do what you expected. BitSet大小方法无法达到您的预期。

The BitSet size implementation happens to use longs to hold the bits. BitSet大小的实现碰巧使用long来保存位。 Thus you will see sizes in multiples of 64. 因此,您将看到64的倍数大小。

The BitSet length method returns the logical size of the BitSet. BitSet长度方法返回BitSet的逻辑大小。 This is propbably what you should be using. 这可能是您应该使用的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM