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バイトを読み取ります
それはすべてあなたが読み込もうとしているものに依存します。
read
srcファイルの行の長さが予測できない場合は、より効率的に使用できる可能性があります。