java - 在 JNI 中连接 C++ istream/ostream 和 Java InputStream/OutputStream

标签 java c++ java-native-interface iostream

是否有任何现有的 C++/JNI 库可以在 Java InputStream 和 C++ istream 以及 Java OutputStream 之间编码访问 和 C++ ostream?特别是,我希望 Java 应用程序能够将 InputStreamOutputStream 传递到使用 iostreams 作为其流接口(interface)的 C++ 库中.

如果不存在现有库,我需要在 istream/ostream 实现中实现的最低功能是什么以支持它?更糟糕的是,我还需要支持 seektell,尽管原则上我应该能够使用 mark重置,然后跳过以执行我需要的操作。

由于这些流可能非常大,我不想简单地将它们加载到 ByteArray 中,然后将其转换为 stringstream 或类似的。

最佳答案

我假设您的源/接收器是 Java 对象,并且您的 C++ 库需要从 Java InputStream 读取并写入 Java OutputStream 实例,并且您需要一个 C++ IO 流的外观,您可以将其传递给 C++ 部分,这些部分将回调数据到您的 Java 对象中。

我建议使用 Boost.Iostreams library 为 Java 流实现 C++ IO 流外观。 .浏览文档和示例。你想要的是 stream_bufferstream类以及您自己的 Sink 实现和 Source概念(另见 Device conceptdevice class )。

更新

要实现搜索,您需要实现 SeekableDevice concept并在您的 device's category 中提供适当的标签.

关于java - 在 JNI 中连接 C++ istream/ostream 和 Java InputStream/OutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22898923/

相关文章:

eclipse - Java Web 项目构建错误

c++ - 检查值存在于 std::map - C++

c++ - 我尝试使用 wchar_t、char16_t 和 char32_t 类型打印汉字,但无济于事。

Android Studio NDK : Compile with ndk-build and get native support with Gradle Experimental

java - 尝试与 Web 服务通信时遇到 "No route to host"错误

java - 正则表达式:在 .java 文件中查找 Java 类的模式

c++ - 这个表达式是什么意思 float pay(float hoursWorked) const;

java - 将 jobjectarray 转换为 vector<uint8_t>

java - 从纯 c 方法调用 JNI 方法

java - 如何在java中使用扫描仪处理奇怪的输入