在JNI下在本机代码中获取java缓冲区的最有效方法是什么?

时间:2010-09-17 09:54:51

标签: java c++ c sockets java-native-interface

问题:

我的代码本机代码(c / c ++)是通过JNI调用的。

一旦启动,它需要每秒多次从Java对象获取byte []缓冲区以进行进一步的繁重处理。当完成前一个缓冲区的处理时,本机代码应该请求缓冲区。

原始想法是通过AF_INET套接字传递缓冲区以避免JNI内容,但该解决方案不能有效地工作。

可能的解决方案:

有以下方法可以改善传递缓冲区:

  1. JNI的东西
  2. AF_LOCAL
  3. ???
  4. 从本机代码获取java byte []缓冲区的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

你应该可以使用JNI。

查看JNI GetPrimitiveArrayCritical()函数。根据文档的不同,JVM实现是否依赖于文档,但在实践中对我来说效果很好。

或者,您可以使用专为此设计的ByteBuffer。请注意,您需要使用其allocateDirect()方法创建ByteBuffer,然后使用GetDirectBufferAddress()在JNI中获取指向缓​​冲区的指针。