我要做的是创建一个普通的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,但这比较晦涩。
一种替代方法是使用Unsafe(仅适用于OpenJDK / HotSpot JVM和本机字节顺序)
Unsafe.getByte(address);Unsafe.getShort(address);Unsafe.getInt(address);Unsafe.getLong(address);



