2

我需要处理一个不适合内存的大文件,或者即使它适合,我也不需要它全部在内存中,因为我只需要查找和修改它的某个部分。

这样做的最佳方法是什么?

4

1 回答 1

3

这是一个调整大型文件中间而不将任何文件读入内存的示例。但是,如果您只想阅读一点内容,请参阅IO.sysread。

TestFile = '/tmp/test'
system "cp /usr/share/dict/words #{TestFile}; chmod +w #{TestFile}"

File.open TestFile, 'r+' do |io|
  io.sysseek 1000000
  io.syswrite 'EASTER EGG!!!'
end
system "grep EASTER.EGG #{TestFile}"

sysread 和 syswrite 在以下几种情况下很有用:

  • 您正在不同的地方执行单个 I/O 操作或各种 I/O 操作(缓冲无济于事)
  • 您正在执行大型 I/O 操作(缓冲会稍慢)
  • 您的程序很复杂或通常只是面向块的,并且正在做自己的缓冲
于 2012-09-23T03:32:26.170 回答