給定一個C++ std::istream
輸入內存流,是否可以以任何方式直接將該流中的數據寫入C文件流(FILE*
),而無需先將數據寫入磁盤?將C++內存流轉換爲C文件流
我問的原因是我有一個C接口採取FILE*
,爲此我想透明地支持壓縮或未壓縮的輸入文件。
這個想法是編寫一個包裝函數,它接受輸入文件,然後使用boost::iostreams
創建一個過濾流,在必要時執行解壓縮,然後將解壓縮的數據以某種方式轉發給C API。
直接的方法是解壓縮壓縮文件,將解壓後的數據寫入磁盤,然後將臨時文件寫入fopen
。我想阻止不得不創建臨時文件。
另一種選擇是解壓縮內存中的所有數據,然後使用fmemopen
獲得解壓縮數據的FILE*
。這意味着我可能必須分配大量數據,但我希望看到緩衝解決方案。這是可能的嗎?
看看'open_memstream'它可以做你想做的事。 –
如果你想流/緩衝數據,'pipe'和'fdopen'可能比'fmemopen'好。 – Sneftel
[boost :: zlib](http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/zlib.html)有幫助嗎? – jxh