如果我想将 src 文件的内容附加到 Ruby 中 dest 文件的末尾,最好使用:
while line = src.gets do
或者
while buffer = src.read( 1024 )
我已经看到这两种方法都使用过,想知道什么时候应该使用每种方法,为什么?
一种用于读取“行”,一种用于读取n个字节。
虽然字节缓冲可能会更快,但其中很多可能会消失在操作系统中,无论如何都可能会缓冲。IMO 它与读取的上下文有更多的关系——你想要线条,还是只是在打乱数据块?
也就是说,在您的特定环境中进行性能测试可能会在决定时有所帮助。
读取针对不同情况量身定制的文件时,您有多种选择。
逐行读取文件,但一次只存储一行:
while (line = file.gets) do
# ...
end
一次读入文件的所有行:
file.readlines.each do |line|
# ...
end
将文件读取为一系列块:
while (data = file.read(block_size))
# ...
end
一次读入整个文件:
data = file.read
这实际上取决于您使用的数据类型。通常read
更适合二进制文件,或者您希望将其作为一个大字符串的文件。gets
和readlines
相似,但readlines
如果您确信文件适合内存,则更方便。不要在数 GB 的日志文件上执行此操作,否则当您的系统开始交换时,您将受到伤害。用于gets
这样的情况。
gets
将根据分隔符读取到行尾
read
一次读取 n 个字节
这完全取决于您要阅读的内容。
read
如果您的 src 文件具有不可预测的行长,则使用它可能会更有效。