私は5GB以上の記録ファイル(バイナリファイル)を持っています。私はそのファイルを読んで、サーバーに送信するのに必要なデータをフィルタしなければなりません。C#で大きなバイナリファイル(5GB)をバイト配列に読み込みますか?
バイトの[]配列は、ファイルデータの2GBまでサポートしています。誰かがすでにこのような状況に対処していたなら、助けが必要です。
using (FileStream str = File.OpenRead(textBox2.Text))
{
int itemSectionStart = 0x00000000;
BinaryReader breader = new BinaryReader(str);
breader.BaseStream.Position = itemSectionStart;
int length = (int)breader.BaseStream.Length;
byte[] itemSection = breader.ReadBytes(length); //first frame data
}
問題:
1: Length is crossing the range of integer.
2: tried using long and unint but byte[] only supports integer
編集。
もう1つのアプローチは、フレームバッファのデータを読み込みます。私のフレームバッファサイズが24000であるとします。バイト配列は多くのフレームデータを格納してからフレームデータを処理し、バイト配列をフラッシュして別の24000フレームデータを格納します。バイナリファイルの最後まで続けるまで。
あなたは本当に一度にメモリ内のすべてのデータが必要ですか?データのフィルタリングにストリーミングアプローチを実装する必要があります。 –
はい....ファイル内の特定のパターンを読み取ってその上でフィルタリングを適用する必要があります – user5794230
ファイル全体をメモリに読み込むのではなく、可能であればビット単位でファイルを処理することをお勧めします。例えば最初のチャンクを読み込み、それをフィルタリングしてサーバに送信する(または一時ファイルに書き込む)前に、次のチャンクを読み込んで処理してください。どのようなフィルタリングをしているかによって、複数のパスが必要になることがあります。どのようなフィルタリングが必要なのか、さらに詳しく説明できますか? – Justin