int j = (1024 * 1024); // = 1 megabyte
char[] buffer = new char[j];
int charsRead = 0;
while ((charsRead = sr.Read(buffer, 0, buffer.Length)) > 0)
{
string john = new string(buffer, 0, charsRead);
sw.WriteLine(john);
}
これは私の最初のバッファ使用の経験であり、上記のコードはバッファの最後が一致しないという事実を除いて私が望むことをしていますテキストファイル内の行の終わりが読み込まれます。これにより、以下の内容が表示されます。バッファの最後までの埋め込み方法
john likes to farm cattle
john likes to farm beetles
john likes to farm rabbits
john likes to farm carrots
john likes to farm b <---1MB buffer ends here
ears <---new 1MB buffer begins here
john likes to farm antelope
john likes to farm rabies
john likes to farm lions
程度のバッファを持つ方法があります:ソースファイルの各行は、潜在的に異なる長さであるため、ブレークは常に行に同じ場所で発生していないことに注意してください指定されたサイズ(この例では1MB)ですが、1MBに達する前の最後の行の最後までです(したがって、バッファのサイズは常に1MBよりもわずかに小さくなります)。私はそのプロセスの一部が、正確に行が何であるかを定義することを含むと思っています(幸いにもこれを行う方法はわかっていますが)その後、私は何をする必要があるか分かりません。
バッファの内容がファイルに書き込まれ、不完全な行が検索され、破損した行でそれらを再結合した後、私が考えることができる唯一の解決策は考えられます。しかし、これは本当に非効率なようだ。
編集:私はから読まれているソースファイルの形式を含めるのを忘れ:
john likes to farm cattle
john likes to farm beetles
john likes to farm rabbits
john likes to farm carrots
john likes to farm bears
john likes to farm antelope
john likes to farm rabies
john likes to farm lions
それは私には起こらなかった、ありがとう。 –
合意。おそらく、改行は、バッファの終わりの前の行が正しいように見えるので、すでにバッファに入っています。 –
バッファサイズを約4KiBまで減らすこともできます。小さいほうが頻繁に呼び出されますが、大きくなるとメモリが増え、メインメモリへの呼び出しが増えます。およそ4KiBが、現在の多くのマシンのスイートスポットに当たっています。 –