Ruby File.read与File.gets

Tam*_*mar 1 ruby file-io

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

 while line = src.gets do
Run Code Online (Sandbox Code Playgroud)

要么

 while buffer = src.read( 1024 )
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ton 7

一个用于读取"行",一个用于读取n个字节.

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

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


tad*_*man 5

在阅读针对不同情况定制的文件时,您有许多选项.

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

while (line = file.gets) do
  # ...
end
Run Code Online (Sandbox Code Playgroud)

一次读入文件的所有行:

file.readlines.each do |line|
  # ...
end
Run Code Online (Sandbox Code Playgroud)

以一系列块的形式读取文件:

while (data = file.read(block_size))
  # ...
end
Run Code Online (Sandbox Code Playgroud)

立即读入整个文件:

data = file.read
Run Code Online (Sandbox Code Playgroud)

这实际上取决于您正在使用的数据类型.通常read更适合二进制文件,或者那些你想要它作为一个大字符串的文件.gets并且readlines类似,但readlines如果您确信文件适合内存,则更方便.不要在多千兆字节的日志文件上执行此操作,否则当您的系统开始交换时,您将陷入伤害的世界.使用gets了这样的情况.