在C JNI库中使用Java InputStream

时间:2012-10-29 19:16:43

标签: java android c java-native-interface

我有一个Android项目,它使用C库来解析某种类型的文件。我正在使用AES和CipherInputStreams以及CipherOutputStreams为项目添加加密。问题是Java代码将文件名和描述符传递给C库,然后C库执行文件读取。如果文件是加密存储的,C库只是将文件读取为垃圾。有没有办法将CipherInputStream传递给C代码,以便处理解密?或者我应该只用Java解密文件并将其作为纯文本存储在私有存储中,然后将文件描述符发送到C代码?这似乎效率相对较低。

1 个答案:

答案 0 :(得分:1)

由于您可以修改C代码,我建议您直接在那里构建加密层。这样,您的Java代码就不会关心它是否在加密文件之上。

如果您确实希望在Java代码中使用该加密逻辑,那么我认为您需要在Java中执行byte []读取并将InputStream.read的每个结果传递给您的C代码。您可能需要为此更改API,并且需要在完成后告诉C代码。