我正在使用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 回答
是的,因为
jbyte
和nByte
是不同的类型,这似乎是唯一可靠的方式而不会触发未定义的行为 . 实际上,nByte
的大小很可能与jbyte
的大小相同,所以你可以将jbyte*
的指针重新解释为nByte*
,但这不是一个可移植的解决方案 .如果你的图书馆采用了
int8_t
,那么故事会有所不同,那么你就可以将jbyte
的指针重新解释为int8_t
的指针,而不会产生负面后果 .