使用swig附加到字节数组

问题描述 投票:0回答:1

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

[无需大惊小怪,我们可以使用SetByteArrayRegion轻松完成此操作-直接将字节数写入byte []。痛饮的问题是:

  • 进行实际工作的代码在.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。这很hacky。

java c++ java-native-interface swig
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.