2013-07-02 2 views
0

У меня есть следующий код, который создает непрямой DoubleBuffer из массива 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

Как я могу это сделать?

ответ

0

Код в выражении else также может использоваться сам по себе, поскольку он будет захватывать либо порядок байтов, а просто хотел бы показать два разных способа сделать практически одно и то же. Верхний - только в том случае, если порядок байтов данных соответствует native.

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(); 
}