gpt4 book ai didi

java - 使用 swig 附加到字节数组

转载 作者:行者123 更新时间:2023-12-01 18:36:48 26 4
gpt4 key购买 nike

我想使用 swig 从 C++ 附加到 Java byte[]。诀窍是在不调用 GetByteArrayElements 的情况下执行此操作,因为如果无法固定 byte[],这将复制 byte[]。

无需 swig,我们可以使用 SetByteArrayRegion 轻松完成此操作 - 直接将字节数写入 byte[]。swig 的问题在于:

  • 执行实际工作的代码位于 .cpp 中 - 例如读取文件的内容并将其放入字符串 fileContents 中。 C++ 代码无法访问 jni 字段。

  • 执行 SetByteArrayRegion 的代码位于 .i 文件中 - 它无权访问 C++ 函数生成的 fileContents 数据。

我找不到任何示例来使用 swig 将 C++ 函数生成的数据附加到 byte[] 中,而不固定整个缓冲区,只使用 SetByteArrayRegion 复制必要的数据。

要实现的示例 C++ 功能:


void append(char *s, int pos) {
char* fileContents = readFromFile();
strcat(s+pos, fileContents);
}

可能的解决方案:

在 .i 文件中,我们执行实际的实现(调用 readFromFile),并使用这些结果直接在 %template 中调用 SetByteArrayRegion 。这是相当老套的。

最佳答案

java 数组不能增长。一旦创建,它们的大小就被锁定。唯一的选择是创建一个新的字节数组并返回它(并编写任何代码最终调用您的代码不仅传递字节数组,而且还将用任何内容替换它自己的变量你返回;如果它不这样做,你就无能为力)。

关于java - 使用 swig 附加到字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60020952/

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