2010-09-17 53 views
1

問題:在JNI下的本地代碼中獲取java緩衝區的最有效方法是什麼?

我的代碼本地代碼(c/C++)通過JNI調用。

一旦啓動,它需要從Java對象每秒幾次獲取byte []緩衝區,以便進一步處理。當前一個緩衝區的處理完成時,本地代碼應該請求緩衝區。

最初的想法是通過AF_INET套接字傳遞緩衝區以避免JNI的東西,但該解決方案不能有效地工作。

可能的解決方案:

有以下幾種方式來改善經過緩衝:

  1. JNI東西
  2. AF_LOCAL
  3. ???

從本機代碼中獲取java byte []緩衝區的最有效方法是什麼?

回答

1

您應該可以使用JNI。

看看JNI GetPrimitiveArrayCritical()函數。無論是否會執行副本,JVM實現都依賴於文檔,但實際上對我來說運行良好。

或者,您可以使用爲此設計的ByteBuffer。請注意,您需要使用其allocateDirect()方法創建您的ByteBuffer,然後使用GetDirectBufferAddress()獲取JNI中緩衝區的指針。

相關問題