首页 文章

使用JNI从Java到本机(C)代码的byte []

提问于
浏览
0

我正在使用Java进行Android开发,其中一些本机部分(外部库)用C语言编写 .

我想将一个byte []从托管(Java)应用程序传递到本机(C)库:

// Declaration for the native method in Java
private native void someMethod(byte[] data);

在本机方面,我想使用字节数组作为另一个提供的本机函数的参数 .

我已经阅读了有关将数组数据转换(复制)为兼容类型(GetByteArrayElements)的JNI方法,但是这留下了jbyte *类型,这与我正在使用的库不兼容(库定义了它自己的nByte type,这是一个unsigned char) .

什么是这种情况的最佳选择?

我应该坚持使用JNI描述的方法,并将jbyte数组类型转换为适当的nByte数组吗?还有其他选择吗?

1 回答

  • 1

    我应该坚持使用JNI描述的方法,并将jbyte数组类型转换为适当的nByte数组吗?

    是的,因为 jbytenByte 是不同的类型,这似乎是唯一可靠的方式而不会触发未定义的行为 . 实际上, nByte 的大小很可能与 jbyte 的大小相同,所以你可以将 jbyte* 的指针重新解释为 nByte* ,但这不是一个可移植的解决方案 .

    如果你的图书馆采用了 int8_t ,那么故事会有所不同,那么你就可以将 jbyte 的指针重新解释为 int8_t 的指针,而不会产生负面后果 .

相关问题