将字节数组传递给JNI函数的问题

时间:2013-08-29 06:50:35

标签: java android string java-native-interface bytearray

我正在使用一个由几个C函数组成的JNI库。在function1中,我传递一个大小为128的字节数组,如下所示:

static byte[] byteAry = new byte[128];
long ret1 = MyLibrary.function1(byteAry);

在函数2中,我传递了function1返回的字节数组,以便进一步处理,如下所示。

final int ret2 = MyLibrary.function2(byteAry);

在function2的C代码中,我得到byteAry的长度如下:

jsize jsArruLen = (*env)->GetArrayLength(env,jDeviceListArr);

当我调用function1后跟function2时,jsArruLen应该是128,因为bytearray被创建为128个字节。

但是,当我手动将字符串复制到byteary然后通过执行以下操作将其传递给function2时:

final String mystring = "this is a string";
byteAry = mystring.getBytes();

jsArruLen只有16个字节长,这是mystring的长度。如何在不改变字符大小的情况下手动将字符串复制到byteAry中?

感谢。

1 个答案:

答案 0 :(得分:0)

我发现mystring.getBytes方法返回一个长度为mystring的新字节数组,而不是将mystring复制到字节数组中。因此,byteAry会被一个mystring长度的新字节数组覆盖。卫生署。我通过将mystring.getBytes分配给临时字节数组来克服这个问题,然后在for循环中手动将临时数组的每个字节元素分配给byteary。它有效,但我想知道是否有方法可以做这种复制?