Ruby で src ファイルの内容を dest ファイルの最後に追加したい場合、
while line = src.gets do
また
while buffer = src.read( 1024 )
私は両方が使用されているのを見てきましたが、それぞれの方法をいつ使用する必要があるのか、またその理由は何なのか疑問に思っていました。
1 つは「行」を読み取るためのもので、もう 1 つはnバイトを読み取るためのものです。
バイトバッファリングの方が高速かもしれませんが、その多くはOSに消えてしまう可能性があり、とにかくバッファリングを行う可能性があります。IMOは、読み取りのコンテキストと関係があります-行が必要ですか、それともデータのチャンクをシャッフルしているだけですか?
とはいえ、特定の環境でのパフォーマンス テストは、決定する際に役立つ場合があります。
さまざまな状況に合わせて調整されたファイルを読み取る場合、いくつかのオプションがあります。
ファイルを1行ずつ読み込みますが、一度に1行だけ保存します。
while (line = file.gets) do
# ...
end
ファイルのすべての行を一度に読み込みます。
file.readlines.each do |line|
# ...
end
ファイルを一連のブロックとして読み込みます。
while (data = file.read(block_size))
# ...
end
ファイル全体を一度に読み込みます。
data = file.read
それは本当にあなたが扱っているデータの種類に依存します。一般readに、バイナリファイル、または1つの大きな文字列として必要なファイルに適しています。getsとreadlines似てreadlinesいますが、ファイルがメモリに収まると確信している場合はより便利です。マルチギガバイトのログファイルでこれを行わないでください。そうしないと、システムがスワッピングを開始するときに、世界が傷つくことになります。getsそのような状況に使用します。
gets区切り文字に基づいて行末まで読み取ります
read一度にnバイトを読み取ります
それはすべてあなたが読み込もうとしているものに依存します。
readsrcファイルの行の長さが予測できない場合は、より効率的に使用できる可能性があります。