java - 在 C++ 和 Java 之间传输数据最快的方法是什么

标签 java c++ sockets unix-socket

<分区>

我有一个 C++ 程序和一个 Java 程序。在 C++ 方面,我有一个包含数百万个条目的 vector 。我需要将这些数据传输到我的 Java 程序中。到目前为止,我已经尝试了以下方法:

  • 创建了一个unix socket,将vector转换为一个长字符串(序列化)并通过unix socket发送

  • 创建了一个 thrift 服务器/客户端模型来传输数据

这两种方法都非常有效,但我获得的性能却很低。我什至没有看到它使用了完整的网络带宽(在 Thrift 的情况下)。

还有 unix 套接字方法,因为我将它序列化为字符串,然后再次将此字符串转换回字符串数组(接收字节 [] 为字符串并拆分)在 Java 端是非常昂贵的操作。

将数据从 C++ 世界更快地传输到 Java 世界并减少重建/序列化对象的开销的最佳方法是什么?

最佳答案

如果两个问题都在同一台机器上,我会使用共享内存映射文件。

这样两个程序都可以以全内存速度访问数据,而无需序列化/反序列化,尤其是当值是 int、long 或 double 值时。

您可以将文件放在 tmpfs 或 ram 驱动器上,以避免撞到硬盘驱动器。

关于java - 在 C++ 和 Java 之间传输数据最快的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35865747/

相关文章:

java - RxJava subscribeOn 和observeOn 以及阻塞w/flatMap。谁做了什么?

c++ - CUB 选择是否有返回的索引

c++ - 逻辑运算符在 if 语句中是否相互影响?

c++ - C++中的基本文件处理,EOF检测

C 通过 udp 套接字发送结构

python - 如果没有接收数据并且数据长度未知,如何在python中中断while循环[TCP]

java - JMH @Fork 的目的是什么?

java - 为什么 Java 中 LinkedList.add() 的内置实现不将元素添加到 LinkedList 的浅副本,而是自定义实现添加?

java - 按需唤醒 hibernate 线程

php - 警告 : socket_connect() [function. 套接字连接]:无法连接 [110]:连接超时