Ruby File.read与File.gets

时间:2012-04-04 18:02:24

标签: ruby file-io

如果我想将src文件的内容追加到Ruby中dest文件的末尾,那么使用它是否更好:

 while line = src.gets do

 while buffer = src.read( 1024 )

我已经看过两者都使用过并且想知道我应该何时使用每种方法以及为什么?

3 个答案:

答案 0 :(得分:7)

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

虽然字节缓冲可能更快,但很多可能会消失在操作系统中,无论如何都可能进行缓冲。 IMO它更多地与读取的上下文有关 - 你想要行吗,或者你只是在推翻数据块?

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

答案 1 :(得分: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会更方便。不要在多千兆字节的日志文件上执行此操作,否则当您的系统开始交换时,您将陷入伤害的世界。对于这种情况,请使用gets

答案 2 :(得分:2)

gets将根据分隔符

读取到行尾

read一次读取n个字节

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

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