2012-04-05 8 views
0

大きなバイナリファイルの大きなチャックを読み書きします。C++でブロブを操作する

標準のC++または今後リリースされる標準のC++や今後登場する標準のC++ + boostにクラスがあるので、作業が楽になりますか?

もしそうでなければ、文字列クラスを使用することは可能でしょうか?そうすることの危険は何でしょうか?

PS:物事を明確にするいくつかの観察。私は、ブロブがたくさん渡されることを期待しているので、参照カウントされたコンテナとCoWがおそらく好ましいでしょう。

文字列クラスを使用することに対する私の抵抗は2つあります。これらは文字列ではなく、文字列ではなく、「印刷できない文字」で、特にnullが表示されると問題が発生する可能性があります。

+4

- 'unsigned char *'があります。あなたはブロブから他に何が必要ですか? – alxx

+0

@JeremyFriesnerこれは 'std :: string'には当てはまりません。 'c_str()'を呼び出して明示的にCスタイルの文字列として扱うのは唯一の事実です。 –

+0

@JohnCalsbeek私は修正された、ありがとう:) –

答えて

1

2進数のデータがある場合は、std::vector<unsigned char>にこのデータを簡単かつ効率的に保存できます。

reserveを呼び出して、ブロブのサイズを知っている(または推測できる)場合は、パフォーマンスを向上させることができます。

最後に、ストリームを使用すると、std::back_inserterを使用してベクターに簡単に読み込むことができます。

+0

"予約"、 "逆"ではありません – SigTerm

+0

@SigTerm:woops、fixed :) – orlp

0

正確に何をしたいかによって、メモリマップファイルsuch as the one from boostは、おそらく良い出発点です。メモリ内の変更については、他にも示唆しているように、std :: vectorを使用してください。

CoWを気にしないでください。Qtのすべてを除いて、C++の世界ではほとんど気になりません。