问题:
我的代码本机代码(c / c ++)是通过JNI调用的。
一旦启动,它需要每秒多次从Java对象获取byte []缓冲区以进行进一步的繁重处理。当完成前一个缓冲区的处理时,本机代码应该请求缓冲区。
原始想法是通过AF_INET套接字传递缓冲区以避免JNI内容,但该解决方案不能有效地工作。
可能的解决方案:
有以下方法可以改善传递缓冲区:
从本机代码获取java byte []缓冲区的最有效方法是什么?
答案 0 :(得分:1)
你应该可以使用JNI。
查看JNI GetPrimitiveArrayCritical()
函数。根据文档的不同,JVM实现是否依赖于文档,但在实践中对我来说效果很好。
或者,您可以使用专为此设计的ByteBuffer。请注意,您需要使用其allocateDirect()
方法创建ByteBuffer,然后使用GetDirectBufferAddress()
在JNI中获取指向缓冲区的指针。