簡體   English   中英

有效地將大量字節數據從C ++傳輸到Java

[英]Effeciently transfer large amount of byte data from C++ to Java

我有一個Java程序,用於以自定義文件格式顯示圖像,使用JNI通過C ++庫讀取。 數據被加載到C ++端的char數組中,並傳輸到Java端的BufferedImage。 由於圖像的各個部分可以從內存中刪除,需要定期重新加載,所以我希望這些操作盡可能快。

我目前正在這樣做的方式是將數據從文件讀取到C ++庫的內存中的緩沖區中。 為了填充BufferedImage,Java代碼對每個像素進行JNI函數調用以從該緩沖區讀取,並且如果需要,將另一塊數據加載到緩沖區中。 這有效,但開銷比我想要的高。

我一直計划要做的就是使用JNI調用將BufferedImage對象傳遞給C ++代碼,並從那一側對其進行函數調用。 我一直在研究JNI,但是我還沒有發現從JVM加載的C ++庫中修改Java對象是否有任何成本。 這是實現這個的好方法,還是有更快的方法用JNI傳輸大量的字節數據?

在JNI邊界上移動數據的最有效方法可能是通過直接的ByteBuffers. 你應該一次盡可能多地移動,因為它越過邊界本身是低效的,而不是轉移。 當然不止一個像素,一次最好是兆字節。

暫無
暫無

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

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