我正在使用一个由几个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中?
感谢。
答案 0 :(得分:0)
我发现mystring.getBytes方法返回一个长度为mystring的新字节数组,而不是将mystring复制到字节数组中。因此,byteAry会被一个mystring长度的新字节数组覆盖。卫生署。我通过将mystring.getBytes分配给临时字节数组来克服这个问题,然后在for循环中手动将临时数组的每个字节元素分配给byteary。它有效,但我想知道是否有方法可以做这种复制?