有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java与C++之间的IPC

我的目标是在同一个SQLite数据库中读取两个单独的应用程序(java和C++中的两个应用程序,它们都在同一台机器上)。C++实现已经工作,并且拥有我需要的所有通信方法。它使用sqlite3。h图书馆

rational要做的第一件事是在Java应用程序中使用JDBC或SQLite包装器。问题是我的嵌入式系统(POSIX)资源非常有限,在包含必要的*时,执行一个简单的查询需要很长时间。猛击它。我已经试用了Xerial JDBC、sqlite4java、sqljet和Christian Werner的Javasqlite包装器/JDBC驱动程序。JavaVM只是需要太长时间来加载和执行所有内容,性能是一个关键问题

作为一种变通方法,我管理Java应用程序使用系统命令并运行sqlite3命令shell来执行查询并获得答案。我正在寻找一个更“时尚”和安全的解决方案

实际上,我需要java应用程序使用C++的方法。它们只返回一个字符串,因为实现的方法只返回一个值。经过大量的IPC阅读,我得出结论,我必须使用命名管道。问题是,我必须使用JNI,但我有一个Java初学者的水平,到目前为止,JNI对我来说太复杂了。在这种情况下,JNI是一种过度杀伤力吗

我可以在这里实现什么其他解决方案


共 (3) 个答案

  1. # 1 楼答案

    不确定通过IPC所需的性能,但有几种方法:

    1. 使用插座
    2. 使用管道
    3. 使用memorymappedfiles(使用memorymappedfiles可以提高性能)

    在这两种情况下,您需要一个序列化程序/反序列化器,用于从java到C++和VeeVeas.A/O的对象(数据)。p>

    根据数据格式,您可能只需要在Java端使用序列化器/反序列化器。(例如,发送二进制数据,C++将不再需要解码它)。一个关于如何在java中使用内存文件的教程可以找到{{a1},C++中需要使用MMAP函数。

  2. # 2 楼答案

    你可以用swig。Swig可以解析你的C/C++头并生成它的Java类/函数。生成的代码有JNI调用,以调用C++的cLASE或C函数。p>

  3. # 3 楼答案

    其实我错了。在Java中,我不需要使用JNI来使用命名管道。我已经使用基本技术成功地传达了这两个过程。在java中,我刚刚使用FileOutputStream和FileInputStream与命名管道通信

    这个链接对我特别有用:

    http://carminedimascio.com/2014/01/named-pipes-with-java/