1

如果我想将 src 文件的内容附加到 Ruby 中 dest 文件的末尾,最好使用:

 while line = src.gets do

或者

 while buffer = src.read( 1024 )

我已经看到这两种方法都使用过,想知道什么时候应该使用每种方法,为什么?

4

3 回答 3

7

一种用于读取“行”,一种用于读取n个字节。

虽然字节缓冲可能会更快,但其中很多可能会消失在操作系统中,无论如何都可能会缓冲。IMO 它与读取的上下文有更多的关系——你想要线条,还是只是在打乱数据块?

也就是说,在您的特定环境中进行性能测试可能会在决定时有所帮助。

于 2012-04-04T18:06:47.127 回答
5

读取针对不同情况量身定制的文件时,您有多种选择。

逐行读取文件,但一次只存储一行:

while (line = file.gets) do
  # ...
end

一次读入文件的所有行:

file.readlines.each do |line|
  # ...
end

将文件读取为一系列块:

while (data = file.read(block_size))
  # ...
end

一次读入整个文件:

data = file.read

这实际上取决于您使用的数据类型。通常read更适合二进制文件,或者您希望将其作为一个大字符串的文件。getsreadlines相似,但readlines如果您确信文件适合内存,则更方便。不要在数 GB 的日志文件上执行此操作,否则当您的系统开始交换时,您将受到伤害。用于gets这样的情况。

于 2012-04-04T18:09:26.673 回答
2

gets将根据分隔符读取到行尾

read一次读取 n 个字节

这完全取决于您要阅读的内容。

read如果您的 src 文件具有不可预测的行长,则使用它可能会更有效。

于 2012-04-04T18:07:47.187 回答