1

これに似たことが以前に尋ねられた可能性があります。私の問題に対する正確な答えが見つからなかったので、ここで質問することにしました。画像ファイルを処理するために独自のクラスが定義されているサードパーティのフレームワークを使用しています。ファイル名のみを受け入れ、実装全体がこれらのファイルストリームを開いて読み取り/書き込みを実行できるようにします。画像バッファー (以前に開いた画像を前処理して取得したもの) を入力し、それをこのフレームワークにフィードしたいと思います。問題は、ファイル名の文字列だけで、バッファをフィードできないことです。

バッファをファイルストリームに変換してシーク可能にし、フレームワークに取り込めるようにする最善の方法を探しています。私が何を見なければならないかを理解するのを手伝ってください。streambuf (filebuf と stringbuf) について読み、これらの型にバッファを割り当てようとしましたが、これまでのところ成功していません。

4

1 に答える 1

1

フレームワークがファイル名のみを受け取る場合は、ファイル名を渡す必要があります。つまり、データはファイル システムに存在する必要があります。

ポータブルな答えは、「データを一時ファイルに書き込み、その名前を渡す」です。

Unix では、名前付きパイプを使用し、別のスレッドを fork して、パイプを介してデータをフィードできる場合があります...

しかし、正直なところ、一時ファイルを使用した方がよいでしょう。カーネルがデータをキャッシュするため、ファイルを開いたり、読み取ったり、削除したりできたとしても、ファイルがディスクに出力されることはほとんどありません。

また、RAM ディスク (tmpfs) を使用できる場合は、すべてがメモリ内で行われることを保証できます。

[編集]

もう1つの考え。std::iostreamの代わりに動作するようにコード ベースを変更できる場合はstd::fstreamstd::stringstream. iostreamこれらは、シークなどを含む、メモリ バッファーに対する通常の操作をすべてサポートします。

于 2011-06-21T05:29:06.660 に答える