非常小的代码但我对这种行为感到非常惊讶。我有一个14字节的密钥,它在一个字节数组中。我将这个字节数组放入一个ByteBuffer然后做一个getLong给我一个BufferUnderflowException。无法理解为什么?
byte key[] = new byte[14];
key[13] = (byte) 3;
key[12] = (byte) 21;
key[11] = (byte) 1;
key[10] = (byte) 15;
key[9] = (byte) 66;
key[8] = (byte) 64;
key[7] = (byte) 3;
key[6] = (byte) 65;
key[5] = (byte) -10;
key[4] = (byte) -65;
key[3] = (byte) 3;
key[2] = (byte) 65;
key[1] = (byte) -10;
key[0] = (byte) -65;
ByteBuffer b = ByteBuffer.allocate(14);
b.put(key);
long l = b.getLong();
答案 0 :(得分:3)
ByteBuffer b = ByteBuffer.allocate(14);
b.put(key, 0, key.length);
long l = b.getLong(0);
你应该在获得长
时指定索引答案 1 :(得分:1)
在" put"的文档中其他字节缓冲区的方法阐明缓冲区的位置增加了put字节数。对于字节数组,这似乎是相同的。因此,在put操作之后,缓冲区中的位置为14,并且剩下0个字节以获得需要8个字节的长值。
java doc of" put":" [...]然后将两个缓冲区的位置递增n。 [...]"