如何在Java中使用ByteBuffer的Wrap方法

6

好的,我正在查找将字节数组转换为其在Java中的数字值的最佳方法,我发现了这个链接。第二个答案提到了使用ByteBuffer类。对于那些不想点击链接的人来说,原问题是这样的:

byte[] by = new byte[8];

怎么将它转换为整数呢?答案如下...
ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4});
long l = bb.getLong();

System.out.println(l);

结果

4

这很棒学习,但在进行下一步之前,我想确认一些事情。

假设我有一个先前读入的字节数组,长度为8个字节。

byte[] oldByte = new byte[8];

然后我会...

ByteBuffer bb = ByteBuffer.wrap(new byte[] {oldByte[2], oldByte[3]});
int intValue = bb.getInt();

这样做/读取方式是否与之前的示例相同?


1
你会得到一个java.nio.BufferUnderflowException异常,因为你需要4个字节才能得到一个int,但是你只给了ByteBuffer 2个字节。 - Brinnis
1个回答

8

ByteBuffer类的文档指定getInt()方法读取接下来的四个字节,因此如果您只向wrap方法传递两个字节,则会收到BufferUnderflowException异常:

抛出:BufferUnderflowException - 如果此缓冲区中剩余的字节数少于四个


那么你的意思是应该这样写:ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, oldByte[2], oldByte[3]}); - This 0ne Pr0grammer
1
@This0nePr0grammer 是的,根据文档,默认的字节顺序是大端字节序,所以看起来是正确的。 - andersschuller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接