使用 swig 追加到字节数组

Append to byte array using swig

本文关键字:数组 到字节 追加 swig 使用      更新时间:2023-10-16

我想使用 swig 从 C++ 附加到 Java 字节[]。诀窍是在不调用 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数组无法增长。一旦制作完成,它们的大小就会被锁定。唯一的选择是创建一个新的字节数组并返回它(并编写最终调用代码的任何代码,而不仅仅是传递一个字节数组,而且还会用你返回的任何变量替换它自己的变量;如果它不这样做,你就无能为力(。