我希望将大量数据(高达~1Gbit)从Java流式传输到C++应用程序(两者都在同一台机器上)。我目前在Linux上使用FIFO,但也需要Windows解决方案。
跨平台最多的方法似乎是本地套接字,但是: a)我不会从TCP校验和和复制到内核空间中获得巨大的开销吗? b)普通用户的防火墙不会尝试检查并可能阻止连接吗?
似乎更安全的解决方案可能是使用JNI和命名管道API (.\pipe\blah),让连接的两端都搞得一团糟。
这真的是我的两个最好的选择吗(人们会推荐哪一个?)谢谢!
发布于 2008-11-05 23:12:49
你应该看看谷歌的Protocol Buffers,它同时支持C++和Java。
发布于 2008-11-05 22:16:26
命名管道将比TCP更有效,但是如果只使用共享内存块呢?
我不知道Java端存在哪些原语来与共享内存交互,但从C++端来看,访问共享内存中的数据比从套接字或命名管道中读取数据更有效。您必须实现自己的流控制和阻塞原语,但这些可以相当直接。
发布于 2008-11-05 22:18:50
我会使用本地套接字,正如您所说的,这是最具跨平台的方法。
内核用户空间拷贝应该不是问题,因为您可以选择的任何其他方法都将需要这种类型的拷贝,可能共享内存除外。它在每个Unix系统上都可用,而且Windows也有自己的doing it方式。
要在Java中使用共享内存,唯一的方法是通过您自己的.DLL/.SO和JNI访问它来实现它。
https://stackoverflow.com/questions/266913
复制相似问题