簡體   English   中英

Java和C ++之間的IPC

[英]IPC between Java and C++

我的目標是從同一個SQLite數據庫中創建兩個獨立的應用程序(一個在Java中,另一個在C ++中,在同一台機器上)。 C ++實現已經有效,並且具有我進行該通信所需的所有方法。 它使用sqlite3.h庫。

要做的第一個理性的事情是在Java應用程序中使用JDBC或SQLite包裝器。 問題是我的嵌入式系統(POSIX)具有非常有限的資源,並且當我將必要的* .jar包含在其中時執行簡單查詢需要很長時間。 我已經嘗試過Christian Werner的Xerial JDBC,sqlite4java,sqljet和Javasqlite Wrapper / JDBC驅動程序。 JavaVM只需要很長時間來加載所有內容並執行它,性能是一個關鍵問題。

作為一種解決方法,我已經管理Java應用程序以使用系統命令並運行sqlite3命令shell來執行查詢並獲得答案。 我正在尋找一種更“時尚”和安全的解決方案。

我實際上需要Java應用程序來使用C ++中的方法。 它們只是在實現方法時返回一個字符串,只返回一個值。 經過大量的IPC閱讀,我得出的結論是我必須使用命名管道。 問題是我必須使用JNI,但我有一個初學Java級別,到目前為止,JNI對我來說太復雜了。 JNI在這種情況下是否過度殺傷?

我可以在這里實施哪些其他解決方案

不確定您在IPC上所需的性能,但有幾種方法:

  1. 使用套接字
  2. 用管子
  3. 使用memorymappedfiles(使用memorymappedfiles,你將獲得性能提升)

在任何一種情況下,您都需要一個序列化器/反序列化器,用於從java傳遞給c ++的對象(數據),反之亦然。

根據數據格式,您可能只需要在Java端使用串行器/解串器。 (例如,您發送的C ++將讀取的二進制數據不再需要解碼)。 關於如何在java中使用memorymapped文件的好教程可以在這里找到,在C ++中你需要使用mmap函數。

你可以使用swig Swig可以解析您的C / C ++標頭並生成它的Java clases /函數。 生成的代碼有jni調用來調用你的c ++ clases或你的c函數。

其實我錯了。 我不需要使用JNI在Java中使用命名管道。 我已經使用基本技術成功地傳達了這兩個過程。 在java中,我剛剛使用FileOutputStream和FileInputStream與命名管道進行通信。

這個鏈接對我特別有用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM