当前位置:  开发笔记 > 编程语言 > 正文

没有JNI的Java C++

如何解决《没有JNI的JavaC++》经验,为你挑选了2个好方法。

我的应用程序是用Java编写的.我需要使用一个C++库.我不想使用JNI.

每秒60次,C++应用程序需要向Java应用程序发送10MB的数据; Java应用程序需要向C++应用程序发送10 MB的数据.

两个应用程序都在同一台机器上运行; 操作系统是Linux或Mac OS X.

最有效的方法是什么?(目前,我正在考虑TCPIP端口;但在C++中,我可以进行内存映射 - 我可以在Java中做类似的事情吗?)

谢谢!



1> Chris Jester..:

是的,Java具有带有NIO框架的内存映射文件.

如果您因为不想编写存根而试图避免使用JNI,那么您还可以extern "C"使用JNA与C++代码(至少是那些代码)进行交互.为获得最佳性能,请使用直接映射(具有native方法的具体类,而不是映射接口)---有关更多详细信息,请参阅文档.:-)


是的---我刚刚编辑了我的问题,如果OP想要避免JNI,因为需要避免编写存根,那么JNA是一个很好的选择(因为它为你处理存根).

2> bmargulies..:

使用映射文件是一种手动滚动高度优化的rpc的方法.您可以考虑从通过本地套接字进行通信的Web服务开始,使用MTOM附加数据,或者只是将其放入文件中.然后你可以测量性能.如果数据有问题,则可以使用映射.

请注意,这有一些奇怪的限制,使您的代码对它是否在Windows上运行敏感.在Windows上,您无法删除已打开的内容.

我应该指出,我已经完成了你在这里提出的建议.它在套接字上有一个控制通道,数据通过一个用C++(或Windows等价物)映射的文件和用Java映射的NIO共享.有用.不过,我从未测量过最大吞吐量.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有