JavaCPP如何避免数据拷贝?

How to deal with JavaCPP avoiding data copy?

我正在使用 JavaCPP 在 Java 应用程序中利用一些 C++ 库,但操纵的数据是大数据。所以我的代码工作正常但内存不友好(我需要它快速工作):

我这样初始化预期的参数:

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 是否提供了 give AND return byte[][] WITHOUT COPYING IT 的解决方案? (我知道这是一个简单的byte[]

我找到了解决办法,只是想分享一下。我将 byte[][] 替换为 ByteBuffer[]direct ByteBuffer 的数组)。然后,做

BytePointer bp = new BytePointer(/*direct ByteBuffer*/)

不复制!性能提升巨大!!