我正在使用Java进行Android开发,其中一些本机部分(外部库)用C ++编写。
我想将一个byte []从托管(Java)应用程序传递到本机(C ++)库:
// Declaration for the native method in Java
private native void someMethod(byte[] data);
在本机方面,我想将字节数组用作另一个提供的本机函数的参数。
我已经阅读了有关将数组数据转换(复制)为兼容类型( GetByteArrayElements )的JNI方法,但是这给我留下了 jbyte * 类型,这与我正在使用的库不兼容(库定义了它自己的 nByte 类型,这是一个unsigned char。)
这种情况的最佳选择是什么?
我应该坚持使用JNI描述的方法,并将jbyte数组类型转换为适当的nByte数组吗?还有其他选择吗?
答案 0 :(得分:1)
我应该坚持使用JNI描述的方法,并将
jbyte
数组类型转换为适当的nByte
数组吗?
是的,由于jbyte
和nByte
是不同的类型,这似乎是唯一可靠的方式,而不会触发未定义的行为。在实践中,nByte
的大小很可能与jbyte
的大小相同,因此您可以将jbyte*
的指针重新解释为nByte*
},但这不是一个可移植的解决方案。
如果您的图书馆使用int8_t
<cstdint>
,那么故事会有所不同,那么您就可以将jbyte
的指针重新解释为int8_t
的指针消极后果。