gpt4 book ai didi

java - 将 int 转换为字节数组 BufferOverflowException

转载 作者:行者123 更新时间:2023-11-29 20:57:20 25 4
gpt4 key购买 nike

我需要将我的整数值转换为字节数组。为了不在每次调用我的 intToBytes 方法时一次又一次地创建 ByteBuffer,我定义了一个静态 ByteBuffer。

private static ByteBuffer intBuffer = ByteBuffer.allocate(Integer.SIZE / Byte.SIZE);

public static byte[] intToBytes(int Value)
{
intBuffer.order(ByteOrder.LITTLE_ENDIAN);
intBuffer.putInt(Value);
return intBuffer.array();
}

我在运行 intToBytes 方法时得到 BufferOverflowException。

W/System.err:java.nio.BufferOverflowExceptionW/System.err:在 java.nio.ByteArrayBuffer.putInt(ByteArrayBuffer.java:352)W/System.err:在 android.mobile.historian.Data.Convert.intToBytes(Convert.java:136)

在 Debug模式下,我看到 intBuffer 的容量为 4,正如我预期的整数值一样。那么这里有什么问题呢?

enter image description here

最佳答案

您在第二次运行该函数时溢出了全局缓冲区。

private static ByteBuffer intBuffer = ByteBuffer.allocate(Integer.SIZE / Byte.SIZE);

public static byte[] intToBytes(int Value)
{
intBuffer.clear(); //THIS IS IMPORTANT, YOU NEED TO RESET THE BUFFER
intBuffer.order(ByteOrder.LITTLE_ENDIAN);
intBuffer.putInt(Value);
return intBuffer.array();
}

关于 ByteBuffer.putInt() 的一些上下文:将给定的 int 写入当前位置并将位置增加 4。使用当前字节顺序将 int 转换为字节。 throw 缓冲区溢出异常如果位置大于限制 - 4。只读缓冲区异常如果不更改此缓冲区的内容。

关于java - 将 int 转换为字节数组 BufferOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27249637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com