我有一个问题,这是可能的,怎么样?从使用Java从C / C ++创建的内存中的缓冲区中读取字节?我的想法是使用JNI在C ++中启动循环,在缓冲区中写入字节并仅将缓冲区的方向发送到Java,然后Java在另一个循环中从中读取字节。目标是减少JNI函数的调用,因为我注意到它们会降低性能。我想知道我必须在Java中使用哪些类以及在C ++中使用哪些函数。
事先谢谢你
答案 0 :(得分:4)
您可以使用ByteBuffer。最简单的方法是使用Java分配的地址ByteBuffer.allocateDirect()
。如果您必须使用C提供的地址,您可以更改地址和限制(大小)以指向您喜欢的任何地方。
如果您更愿意使用更低级别的东西,可以在Oracle JVM上使用Unsafe.getXxxx(long address)
或Unsafe.setXxxx(long address, T value)
方法,但必须小心使用这些方法,因为不正确的使用会导致JVM崩溃。 (就像在C中使用无效指针一样)这些方法由ByteBuffer使用,并转换为优化的单个机器代码指令。