在Windows上从Java到C++的高效数据传输

6 c++ java pipe fifo

我希望将大量数据(最高~1 Gbit)从Java流式传输到C++应用程序(两者都在同一台机器上).我目前在Linux上使用FIFO,但也需要Windows解决方案.

最跨平台的方法似乎是一个本地套接字,但是:a)我不会从TCP校验和从内核空间复制和从内核空间复制中获得巨大的开销,并且b)普通用户的防火墙不会尝试检查和也许阻止连接?

似乎更安全的解决方案可能是使用JNI和命名管道API(\.\ pipe\blah),这使得连接两端的平台特定混乱.

这些真的是我最好的两个选择(人们会推荐哪些?)谢谢!

Joh*_*ing 7

您应该看一下Google的Protocol Buffers,它支持C++和Java.

  • Protobuff定义你转移的内容,而不是如何转移.问题在这里如何. (4认同)

Rob*_*ker 5

命名管道比 TCP 更有效,但是只使用共享内存块怎么样?

我不知道 Java 端存在哪些用于与共享内存接口的原语,但从 C++ 端来看,访问共享内存中的数据比从套接字或命名管道中读取数据更有效。您必须实现自己的流控制和阻塞原语,但这些可能相当简单。