0

我一直在寻找一种将 FloatBuffer 数组转换为字节数组的方法。我找到了一种将 FloatBuffer 对象转换为 byte[] 的方法: convert from floatbuffer to byte[]

但是在互联网上搜索了几个小时后,我无法找到相当于从 FloatBuffer[] 转换的东西。

反过来,从 byte[] 转换为 FloatBuffer[],我只发现了这个:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(floatBufferObject);
byte [] descriptorsBytes = bos.toByteArray();

但似乎有点奇怪,没有更简单的方法可以做到这一点。也许我遗漏了一些非常明显的东西,也许我应该将 FloatBuffer 数组转换为其他更容易转换为字节数组的类型?

4

3 回答 3

3

你要一个 FloatBuffer还是多个?

要从 a 转换FloatBuffer为 a byte[],您可以执行类似的操作

 FloatBuffer input;
 byte[] output = new byte[input.capacity() * 4];
 ByteBuffer.wrap(output).asFloatBuffer().put(input);

另一个方向就是

 ByteBuffer.wrap(byteArray).asFloatBuffer()
于 2013-02-28T04:05:41.367 回答
1

您已经有了如何将一个FloatBuffer转换为字节数组的答案,因此只需扩展它以转换它们的数组:

final FloatBuffer[] floatBuffers = new FloatBuffer[] {...};
final ByteBuffer byteBuffer = ByteBuffer.allocate(sumOfFloatBufferCapacities) * 4);
final FloatBuffer floatBufView = byteBuffer.asFloatBuffer();
for (final FloatBuffer fBuf : floatBuffers) {
    floatBufView.put(fBuf);
}
byte[] data = byteBuffer.array();

以上是伪代码,您可以根据自己的需要进行调整。

于 2013-02-28T04:25:36.973 回答
0

将 FloatBuffer[] 转换为 byte[]:

    FloatBuffer[] buffers = ...
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    for (FloatBuffer fb : buffers) {
        ByteBuffer byteBuffer = ByteBuffer.allocate(fb.capacity() * 4);
        byteBuffer.asFloatBuffer().put(fb);
        bos.write(byteBuffer.array());
    }
    byte[] ba = bos.toByteArray();
于 2013-02-28T05:14:43.100 回答