gpt4 book ai didi

java - 将 LongBuffer/IntBuffer/ShortBuffer 转换为 ByteBuffer

转载 作者:太空狗 更新时间:2023-10-29 22:50:27 27 4
gpt4 key购买 nike

我知道一个快速的方法,可以将byte/short/int/long数组转换成ByteBuffer,然后得到一个字节数组。例如,要将字节数组转换为短数组,我可以这样做:

byte[] bArray = { 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 };

ByteBuffer bb = ByteBuffer.wrap(byteArray);
ShortBuffer sb = bb.asShortBuffer();
short[] shortArray = new short[byteArray.length / 2];
sb.get(shortArray);

生成一个像这样的短数组:[256, 0, 0, 0, 256, 0, 0, 0]

如何使用 java.nio 进行逆运算类?

现在我这样做:

shortArray[] = {256, 0, 0, 0, 256, 0, 0, 0};
ByteBuffer bb = ByteBuffer.allocate(shortArray.length * 2);
for (short s : shortArray) {
bb.putShort(s);
}
return bb.array();

然后我得到原始的[1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0] 字节数组.但我想使用像 ShortBuffer.asByteBuffer() 这样的方法,而不是手动循环来完成它。

我找到了 request to Sun of 2001 , 但他们不接受 ;-((

最佳答案

这个呢? :

    bb.asShortBuffer().put(shortArray);

然后 bb 包含您的数据。

完整代码:

public class Test {
public static void main(final String args[]) {
short[] arr = { 256, 0, 0, 0, 256, 0, 0, 0 };
for (byte b : F(arr)) {
System.out.print(b);
}
}

public static byte[] F(short[] arr) {
java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(arr.length * 2);
bb.asShortBuffer().put(arr);
return bb.array(); // this returns the "raw" array, it's shared and not copied!
}
}

关于java - 将 LongBuffer/IntBuffer/ShortBuffer 转换为 ByteBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665147/

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