Java 如何避免BufferUnderflowException

Java 如何避免BufferUnderflowException,java,exception,buffer,Java,Exception,Buffer,我使用这个函数将bytearray转换为int public static int byteArrayToInt(byte[] b) { ByteBuffer bb = ByteBuffer.wrap(b); bb.order(ByteOrder.LITTLE_ENDIAN); return bb.getInt(); } 不幸的是,我在return语句中得到java.nio.BufferUnderflowException。顺便说一下,我多次调用这个函数。我了解到,当读

我使用这个函数将bytearray转换为int

public static int byteArrayToInt(byte[] b) {
    ByteBuffer bb = ByteBuffer.wrap(b);
    bb.order(ByteOrder.LITTLE_ENDIAN);
    return bb.getInt();
}
不幸的是,我在return语句中得到java.nio.BufferUnderflowException。顺便说一下,我多次调用这个函数。我了解到,当读取的字节数超过缓冲区大小时,就会发生这种情况。但谁能告诉我如何避免它

是否有方法将我的原始bytearray复制到大小为4的新bytearray并将此bytearray传递给函数

更新: 我尝试了以下主要方法:

byte[] bbTemp=new byte[4];
bbTemp = originalbyteArray;

并将bbTemp传递给上述函数,但它不起作用。知道为什么吗?

A
BufferUnderflowException

如果此缓冲区中剩余的字节少于四个


确保
byte[]
中至少有4个字节,正好是
int

的大小。我需要压缩内容,我不希望我的Bytebuffer不必要地为4字节。我不介意函数中有一个临时Bytebuffer。但稍后,我想计算我的Bytebuffer在main方法中采用的确切字节大小。@user An
int
在内存中用4个字节表示。这是没有办法的。你应该发布你想要实现的东西,你可能会得到更好的帮助。我的意思是,如果函数返回4字节的int,那就好了。我只是不想把main方法中原来的Bytebuffer改成4字节。可以这样做吗?@user2441441方法返回and
int
。但是它不能构造<代码> INT/COM>除非您传递一个4字节的数组。@用户首先考虑原始字节数组所存储的内容。这些字节是什么意思?尝试将它们转换为
int
,有意义吗?我现在看不出目的。