0

我有以下代码从 Byte 数组创建间接DoubleBuffer。

ByteArrayInputStream bais;
Byte doubleGeomByteArray[];
DoubleBuffer dbb;
...
doubleGeomByteArray[] = new byte[ByteBuffer.wrap(intBuffer).order(endian).getInt() * 2 * 8];
bais.read(doubleGeomByteArray); //reads from ByteArrayInputStream into byte array
dbb = ByteBuffer.wrap(doubleGeomByteArray).order(endian).asDoubleBuffer();

这很好用,但是我需要 dbb 是直接的,因为它将与 OpenGL ES 一起使用

我怎样才能做到这一点?

4

1 回答 1

0

else 语句中的代码也可以单独使用,因为它会捕获任一字节顺序,只是想展示两种不同的方式来做几乎相同的事情。只有当数据字节顺序与本机匹配时,最重要的是。

if (endian.equals(ByteOrder.nativeOrder())){
    interimByteBuffer = ByteBuffer.allocateDirect(doubleGeomByteArray.length);
    dbb = interimByteBuffer.asDoubleBuffer();
    interimByteBuffer.put(doubleGeomByteArray);
}
else{
    interimByteBuffer = ByteBuffer.wrap(doubleGeomByteArray).order(endian);
    dbb = ByteBuffer.allocateDirect(numOfPoints * 2 * 8).order(ByteOrder.nativeOrder()).asDoubleBuffer();
    while(interimByteBuffer.hasRemaining()) {
        dbb.put(interimByteBuffer.getDouble());
    }
    dbb.flip();
}
于 2013-07-04T16:07:03.687 回答