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

标签 java jna pointer-arithmetic

我有一个像这样的 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/

相关文章:

java - 使用 Java API 的 Elasticsearch 复杂查询

java - Spring Batch 自定义 ItemReader IllegalArgumentException

java - Selenium 上传文件 : file not found [docker]

java - 如何在 Java 中获取 JAVA_HOME 和 CATALINA_HOME 环境变量?

c++ - 在 C++ 中创建和使用线程

java - Android 编程 SQL PHP

Java:使用 char** 和回调作为参数加载 c++ dll

java - 使用 JNA 发布到 POSIX 信号量

c++ - 指针变量名返回的值是多少?