studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código crear con avanzado aplicaciones java jvm bytebuffer

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)?