我尝试使用ByteBuffer切片byte []数据。整个过程如下。
切片的数据通过jni接口传输到本机代码。在这种情况下,jni要求直接分配ByteBuffer。问题是,如果我通过array()方法获得byte []并将其包装在ByteBuffer中,则它不再是直接状态。在这种情况下,有没有办法使ByteBuffer保持直接状态?还是有一种避免使用内存复制的解决方法?由于性能问题,我不想使用内存复制。
这是最少的代码示例。
ByteBuffer[] directBuffer = ByteBuffer.allocateDirect(bufferSize);
if (directBuffer.isDirect()) {
Log.i(TAG, "Direct buffer!");
} else {
Log.i(TAG, "Non direct buffer!");
}
ByteBuffer test = ByteBuffer.wrap(directBuffer.array());
if (test.isDirect()) {
Log.i(TAG, "Direct buffer!");
} else {
Log.i(TAG, "Non direct buffer!");
}
结果
Direct buffer!
Non direct buffer!
谢谢!