Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理JavaCPP避免数据复制? 我使用Javapp开发java应用程序中的C++库,但操作数据是大数据。因此,我的代码工作正常,但内存不友好(我需要它快速工作): 我有一个大的字节[][]要提供给本机部分 目标本机函数类似于nativeFunction(PointerPointer参数)-> (准确地说,这是预期的指针指针类型,因此BytePointer作为byte[][]的列表是byte[]的列表)->_Java_Android_Memory_Java Native Interface_Javacpp - Fatal编程技术网

如何处理JavaCPP避免数据复制? 我使用Javapp开发java应用程序中的C++库,但操作数据是大数据。因此,我的代码工作正常,但内存不友好(我需要它快速工作): 我有一个大的字节[][]要提供给本机部分 目标本机函数类似于nativeFunction(PointerPointer参数)-> (准确地说,这是预期的指针指针类型,因此BytePointer作为byte[][]的列表是byte[]的列表)->

如何处理JavaCPP避免数据复制? 我使用Javapp开发java应用程序中的C++库,但操作数据是大数据。因此,我的代码工作正常,但内存不友好(我需要它快速工作): 我有一个大的字节[][]要提供给本机部分 目标本机函数类似于nativeFunction(PointerPointer参数)-> (准确地说,这是预期的指针指针类型,因此BytePointer作为byte[][]的列表是byte[]的列表)->,java,android,memory,java-native-interface,javacpp,Java,Android,Memory,Java Native Interface,Javacpp,我通过以下方式初始化预期参数: byte[][] myBigDatas; // myBigDatas.length = 4 // myBigDatas[x].length = something like 4000000 // Initialize param PointerPointer<BytePointer> srcParam = new PointerPointer<BytePointer>( myBigDatas[0], myBigDatas[

我通过以下方式初始化预期参数:

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);
byte[]myBigDatas;
//myBigDatas.length=4
//myBigDatas[x].length=4000000左右
//初始化参数
指针指针srcParam=新指针指针(
myBigDatas[0],
myBigDatas[1],
myBigDatas[2],
myBigDatas[3]);
//调用本机函数
nativeFunction(srcParam);
参考文档,问题在于,对于调用
PointerPointer(…)
创建的每个
BytePointer
以及提供的数据,它不是内存包装,而是复制

有没有办法避免抄袭

编辑:


否则,JNI是否为给定和返回
字节[][]
提供解决方案,而不复制它?(我知道这是一个简单的
字节[]

我找到了一个解决方案,只想与大家分享。我用一个
字节[][]
替换了我的
字节[][]
(一个直接的
字节[]
数组)。那么,做什么?

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

不会复制的!性能增益是巨大的

我找到了一个解决方案,只想与大家分享。我用一个
字节[][]
替换了我的
字节[][]
(一个直接的
字节[]
数组)。那么,做什么?

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

不会复制的!性能增益是巨大的

如果内存和执行时间非常关键,本机无法避免,我会将更多代码转移到本机端…@Fildor是对的。我建议在C++中使用Byth[]来代替java。@你们两个当然是对的,但不幸的是,我现在不能。如果内存和执行时间很关键,本地不能避免,我会把更多的代码移到本机的边…@ Fieldor是正确的。我建议用C++代替java来读取字节[]。你们两个当然是对的,但不幸的是,我现在不能。