1
我正在使用JavaCPP來利用Java應用程序中的一些C++庫,但操縱數據是大數據。所以,我的代碼工作正常,但不是記憶友好(我需要它的工作速度快):如何處理避免數據複製的JavaCPP?
- 我有一個大
byte[][]
提供原生的一部分。 - 目標本地功能是一樣的東西
nativeFunction(PointerPointer param)
- >Doc - (準確地,這是一個
PointerPointer<BytePointer>
型預期,從而byte[][]
的BytePointer
一個列表是byte[]
列表) - >Doc
我初始化預期PARAM這樣:
byte[][] myBigDatas;
// myBigDatas.length = 4
// myBigDatas[x].length = something like 4000000
// Initialize param
PointerPointer<BytePointer> srcParam = new PointerPointer<BytePointer>(
myBigDatas[0],
myBigDatas[1],
myBigDatas[2],
myBigDatas[3]);
// Call the native function
nativeFunction(srcParam);
問題是,參考各種文檔,每個BytePointer
由PointerPointer<BytePointer>(...)
與提供的數據的調用創建,它不是一個內存包裝,而是一個副本。
有一種方法可以避免複製?
編輯:
否則,不爲JNI提供給予解決,並返回byte[][]
但沒有照搬? (我知道這是一個簡單的byte[]
)
如果內存和執行時間很關鍵,本機無法避免,我會將更多的代碼轉移到本機端...... – Fildor
@Fildor是對的。我建議用C++而不是java讀取byte []。 – neohope
@雙方當然你是對的,但不幸的是,我現在不能。 – N0un