1

Ruby で src ファイルの内容を dest ファイルの最後に追加したい場合、

 while line = src.gets do

また

 while buffer = src.read( 1024 )

私は両方が使用されているのを見てきましたが、それぞれの方法をいつ使用する必要があるのか​​、またその理由は何なのか疑問に思っていました。

4

3 に答える 3

7

1 つは「行」を読み取るためのもので、もう 1 つはnバイトを読み取るためのものです。

バイトバッファリングの方が高速かもしれませんが、その多くはOSに消えてしまう可能性があり、とにかくバッファリングを行う可能性があります。IMOは、読み取りのコンテキストと関係があります-行が必要ですか、それともデータのチャンクをシャッフルしているだけですか?

とはいえ、特定の環境でのパフォーマンス テストは、決定する際に役立つ場合があります。

于 2012-04-04T18:06:47.127 に答える
5

さまざまな状況に合わせて調整されたファイルを読み取る場合、いくつかのオプションがあります。

ファイルを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つの大きな文字列として必要なファイルに適しています。getsreadlines似てreadlinesいますが、ファイルがメモリに収まると確信している場合はより便利です。マルチギガバイトのログファイルでこれを行わないでください。そうしないと、システムがスワッピングを開始するときに、世界が傷つくことになります。getsそのような状況に使用します。

于 2012-04-04T18:09:26.673 に答える
2

gets区切り文字に基づいて行末まで読み取ります

read一度にnバイトを読み取ります

それはすべてあなたが読み込もうとしているものに依存します。

readsrcファイルの行の長さが予測できない場合は、より効率的に使用できる可能性があります。

于 2012-04-04T18:07:47.187 に答える