reales - ¿Hay alguna manera de crear un ByteBuffer directo desde un puntero únicamente en Java?
libro de android studio en español pdf (1)
Lo que hago es crear un DirectByteBuffer normal y cambiar su dirección.
Field address = Buffer.class.getDeclaredField("address");
address.setAccessible(true);
Field capacity = Buffer.class.getDeclaredField("capacity");
capacity.setAccessible(true);
ByteBuffer bb = ByteBuffer.allocateDirect(0).order(ByteOrder.nativeOrder());
address.setLong(bb, addressYouWantToSet);
capacity.setInt(bb, theSizeOf);
Desde este punto, puede acceder al ByteBuffer haciendo referencia a la dirección subyacente. He hecho esto para acceder a la memoria en los adaptadores de red para la copia cero y funcionó bien.
Puede crear un DirectByteBuffer para su dirección directamente, pero esto es más oscuro.
Una alternativa es usar Inseguro (esto solo funciona en OpenJDK / HotSpot JVMs y en orden de bytes nativo)
Unsafe.getByte(address);
Unsafe.getShort(address);
Unsafe.getInt(address);
Unsafe.getLong(address);
¿O debo tener una función auxiliar JNI que llame a env-> NewDirectByteBuffer (buffer, size)?