ByteBuffer导致下溢异常

时间:2014-09-20 10:15:18

标签: java int bytearray bytebuffer bufferunderflowexception

我在使用自定义协议通过TCP发送数据时遇到了一个问题,该协议依赖于知道数据的长度所以我决定由于int的大小而无法发送一个int可能是不同的长度(int 10长度为2,而int 100的长度为3)所以我决定发送一个4字节的int表示,因此我遇到了ByteBuffer。

通过以下示例,我得到一个BufferUnderflowException

try
{
    int send = 2147483642;
    byte[] bytes = ByteBuffer.allocate(4).putInt(send).array(); // gets [127, -1, -1, -6]
    int recieve = ByteBuffer.allocate(4).put(bytes).getInt(); // expected 2147483642; throws BufferUnderflowException
    if (send == recieve)
    {
        System.out.println("WOOHOO");
    }
}
catch (BufferUnderflowException bufe)
{
    bufe.printStackTrace();
}

1 个答案:

答案 0 :(得分:3)

您需要设置起始索引或倒带缓冲区;

int recieve = ByteBuffer.allocate(4).put(bytes).getInt(0);