java - 在 C JNI 库中使用 Java InputStream

标签 java android c java-native-interface

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

最佳答案

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

如果您确实希望在 Java 代码中包含该加密逻辑,那么我认为您需要在 Java 中进行 byte[] 读取,并将 InputStream.read 的每个结果传递给您的 C 代码。您可能需要为此更改 API,并需要一种方法来告诉 C 代码何时完成。

关于java - 在 C JNI 库中使用 Java InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128176/

相关文章:

java - Facebook 图形 API : Attend to event always returns responseCode: 200, false

c - 将结构从 main() 传递到辅助函数时出现段错误

c - 如何将字符串的一部分复制到另一个字符串中?

java - 数组有问题,无法向他添加任何内容

java - SonarQube:结果未显示

java - 在java中使用递归返回树的后序表达式的问题

java - Gradle 项目同步失败 Android Studio 3.0 (JDK 9.0.1)

android - 如何正确隐藏ListView中的ImageView?

c - 打开大文件

java - 如何使用 JAVA 显示以其他语言(如乌尔都语、西类牙语等)保存的单词(在数据库中)。