gpt4 book ai didi

java - 如何在 JNA 中向 java 数组添加偏移量

转载 作者:行者123 更新时间:2023-11-30 03:14:31 25 4
gpt4 key购买 nike

我有一个像这样的 native 函数。它是专有 DLL 的一部分,我无法修改。

void foo(char* src, size_t len);

在Java中,我有一个像这样的普通数组:byte[] array = makeArray();数组必须位于堆上,而不是位于 native 内存中,原因超出了这个问题的范围。

如果我想使用整个数组调用 foo,我可以这样做,并且它已经在我的软件中运行:

libraryWrapper.foo(array, array.length);

但是,我想单步执行这个数组并对其进行 foo 处理,如下所示:

for(int i = 0; i <= array.length - 10000; i += 10000)
libraryWrapper.foo(array + i, 10000);

有没有办法使用 JNA 实现这种“指针算术”,而不使用中间内存或编写另一个 DLL?

最佳答案

您可以使用ByteBuffer.wrap()与你的完整阵列。当您将该缓冲区传递给 native 代码时,JNA 将使用缓冲区的当前偏移量生成指向数组的 native 指针。

您可以在每次调用时换行,也可以根据需要使用 .position(int) 操作缓冲区的偏移量。 .

或者,将较小的数组传递给 native 代码,然后将结果复制到主存储。

关于java - 如何在 JNA 中向 java 数组添加偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32948249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com