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

Java与C+之间的IPC+; 我的目标是在同一个SQLite数据库中读取两个单独的应用程序(java和C++中的两个应用程序,它们都在同一台机器上)。C++实现已经工作,并且拥有我需要的所有通信方法。它使用sqlite3.h库,java,c++,sqlite,ipc,Java,C++,Sqlite,Ipc,rational要做的第一件事是在Java应用程序中使用JDBC或SQLite包装器。问题是,我的嵌入式系统(POSIX)资源非常有限,在包含必要的*.jar时,执行简单查询需要很长时间。我已经试用了Xerial JDBC、sqlite4java、sqljet和Christian Werner的Javasqlite包装器/JDBC驱动程序。JavaVM只是需要太长时间来加载和执行所有内容,性能是一个关键问题 作为一种变通方法,我管理Java应用程序使用系统命令并运行sqlite3命令shell来

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

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

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


我还可以在这里实施什么其他解决方案?

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

  • 使用插座
  • 使用管道
  • 使用memorymappedfiles(使用memorymappedfiles您将获得性能提升)
  • 在这两种情况下,您需要一个序列化程序/反序列化器,用于从java到C++和VeeVeas.A/O的对象(数据)。p>


    根据数据格式,您可能只需要在Java端使用序列化器/反序列化器。(例如,发送二进制数据,C++将不再需要解码它)。在java中可以找到一个关于如何使用内存文件的教程,C++中需要使用MMAP函数。Swig可以解析您的C/C++头并生成它的Java类/函数。生成的代码有JNI调用来调用C++的cLASE或C函数。在Java中,我不需要使用JNI来使用命名管道。我已经使用基本技术成功地传达了这两个过程。在java中,我刚刚使用FileOutputStream和FileInputStream与命名管道通信

    这个链接对我特别有用:


    也许你会在这里找到一些东西:这里的JNI是一种简单而直接的方法,我更喜欢在你的情况下使用它。您也可以使用套接字(UDP/TCP)或共享内存而不是管道。从没听说过,但听起来很有趣。