java - ByteBuffer 导致下溢异常

标签 java int arrays bytebuffer bufferunderflowexception

我在使用依赖于知道数据长度的自定义协议(protocol)通过 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();
}

最佳答案

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

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

关于java - ByteBuffer 导致下溢异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25947680/

相关文章:

javascript - 如何通过 Javascript 数组中的键删除对象?

java - 从测试包导入到主包

java - 从套接字读取时获取空字符串

java - user.dir 属性在 OSX jdk 1.8.0_111 上损坏?其他操作系统、版本怎么样?

php - 如何将美国格式的 int 格式化为欧洲格式

c++ - 数组 -> 另一个空 int 数组混淆

java - 用户进入特定网页后如何禁用刷新按钮?

Python __add__ 整数魔术方法

c - 使用嵌套结构数组进行结构初始化

javascript - 从数组中删除所有不偶数的值