是否有一种方法来创建一个直接ByteBuffer从指针单独在Java中



或者我必须有一个调用env->NewDirectByteBuffer(buffer, size)的JNI辅助函数吗?

我所做的是创建一个正常的DirectByteBuffer并更改它的地址。

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

从这里可以访问引用底层地址的ByteBuffer。我已经为零拷贝访问网络适配器上的内存做了这个,它工作得很好。

你可以直接为你的地址创建一个DirectByteBuffer,但这更晦涩。


另一种选择是使用不安全(这只适用于OpenJDK/HotSpot jvm和本机字节顺序)

Unsafe.getByte(address);
Unsafe.getShort(address);
Unsafe.getInt(address);
Unsafe.getLong(address);

最新更新