【发布时间】:2021-11-01 03:21:30
【问题描述】:
就不在内存中处理数据而言,这仍然是最佳答案吗? (What is the most efficient(fastest) way of passing data from C++ to Java?)
我在考虑 Apache Arrow,我看到了两个选项:
- 在 C++ 中构建 Apache Arrow 数据结构,将其“序列化”为字节,通过 JNI 将字节传递给 Java 类(AFAIK 需要在 C++ 进程内存和 JVM 堆之间处理数据)。
- 使用 Apache Arrow Plasma,但需要运行 Plasma 服务器 AFAIU。
我错过了什么吗?
【问题讨论】:
-
以什么方式高效?编码时间?维护?内存使用?性能?
-
内存使用,我想在 C 中创建数据结构并将其传递给 Java,而不是将其复制到另一个类似 jvm 的对象。
-
如果您没有使用像 Arrow Plasma 这样的中间人,您打算如何将数据从一个可执行文件转发到另一个可执行文件?如果他们在同一个系统上,我猜你可以使用 staging 文件夹传递 JSON 文件,这可能是最简单的机制。如果 java 正在运行一个 Web 界面,那会更容易。只需让 C 应用程序以已知格式将其扔到 Java 端点(同样,我会使用 JSON,但 XML 可以工作)。
-
简单地使用来自 Java 的 Apache Arrow 的 C++ API 和 JavaCPP Presets for Arrow 可能是最有效的:github.com/bytedeco/javacpp-presets/tree/master/arrow
标签: java c++ apache-arrow