簡體   English   中英

如何在Java中創建Apache箭頭向量,通過JNI傳給C++代碼,在C++中讀/寫

[英]How to create Apache Arrow vectors in Java, pass them to C++ code through JNI, read/write them in C++

我一直在閱讀 Apache Arrow 文檔,我已經弄清楚如何在 Java 和 C++ 中使用它。但我想做的是將一些工作從 Java 卸載到 JNI (C/C++) 代碼,以及文檔(例如https://arrow.apache.org/docs/java/cdata.html )似乎沒有涵蓋我的用例,示例中的方法(例如 IntVector 上的 getMemoryAddress)似乎不存在就像他們在示例中所做的那樣。 我想從簡單開始,所以這就是我想做的:

  • 在 Java 中分配兩個 Arrow IntVector 並用數據填充它們
  • 為結果分配Java中的另一個IntVector空間
  • 從這些向量中獲取我需要的任何本機指針並通過 JNI 調用傳遞它們
  • 將這些向量包裝在 C++ 中,以便我可以訪問它們。
  • 做任何我想卸載的工作並最終確定結果向量
  • 返回 Java 並訪問結果。

任何人都可以指出一個例子或一些關於如何做到這一點的技巧嗎?

順便說一句,示例還使用 JavaCPP 而不是 JNI。 但是我在這個項目中已經有了一堆 JNI 代碼,如果沒有必要,我寧願不混入另一種橋接。

謝謝。

我嘗試在 Java 中分配 IntVector 對象,但我不知道我必須檢索哪些朴素指針才能傳遞給 C++ 以提供對這些向量的正確訪問。

JavaCPP 只是為了方便示例,JNI 就可以了。

C數據接口還是你想要的。 當您說“獲取我需要的任何本機指針”時:這正是 C 數據接口中的struct ArrowArray 使用 Java 中的 C 數據接口模塊導出您的 Java arrays 並獲取struct ArrowArray的地址,然后將該地址通過 JNI 傳遞給您的 C++ 代碼。 然后,使用 libarrow 的 C 數據接口實現導入 arrays 並使用它們。

當 C++ 端完成后,它做同樣的事情:它導出結果向量並通過 JNI 返回一個地址到 Java; 然后 Java 代碼從該地址導入向量。

暫無
暫無

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

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