0

我正在使用一个由几个 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 个字节。

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

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

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

谢谢。

4

1 回答 1

0

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

于 2013-08-29T07:05:33.990 回答