在JNI

2014-04-06 33 views
3

C++的IStream/ostream的和Java的InputStream/OutputStream的之間的連接是否有任何現有的C++/JNI是做編組一個Java InputStream之間的訪問的工作和C++ istream,以及一個Java OutputStream庫和C++ ostream ?特別是,我希望Java應用程序能夠將InputStreamOutputStream傳遞到使用iostreams作爲其流式接口的C++庫中。在JNI

如果沒有現有的庫,那麼爲了支持這個,我需要在一個istream/ostream實現中實現的最小功能是什麼?更糟糕的是,我還需要支持seektell,儘管原則上我應該能夠使用mark,resetskip來做我所需要的。

由於這些流可能非常大,我不想簡單地將它們加載到ByteArray中,然後將其變爲stringstream等。

+0

澄清一下,這裏的數據流是什麼?實際的源/匯Java流或C++流? – wilx

+0

我以爲它已經很清楚了,但我反正編輯了這個問題。 – fluffy

回答

1

我假設您的源/匯是Java對象,並且您的C++庫需要從Java InputStream讀取並寫入Java OutputStream實例,並且您需要C++ IO流的外觀,您可以將其傳遞給您的C++部分將回調數據到您的Java對象中。

我建議使用Boost.Iostreams library實現Java流的C++ IO流facade。瀏覽文檔和示例。你想要的是stream_bufferstream類,連同你自己實現的SinkSource的概念(另請參閱Device conceptdevice class)。

UPDATE

要實現求您需要實現SeekableDevice concept並在device's category提供合適的標籤。

+0

我在看,但我沒有看到如何添加seek/tell功能。不幸的是,尋找/告訴是絕對必要的,因爲大多數操作需要倒帶,其中一些操作需要隨機訪問。當然,無論如何,正確支持尋找/告知將會因Java的標記/重置概念而受到傷害。 – fluffy

+0

@fluffy:我已經更新了引用SeekableDevice概念的答案。 – wilx

+0

謝謝!我會研究這個,並接受它是否適合我。 :)令人失望的是,沒有任何現有的庫可以完成所有這些工作 - 您會認爲這是一個常見的用例... – fluffy