Techioz Blog

.gz ファイルを解凍し、チャンクごとに準備します

概要

読みたい非常に大きな .gz ファイルが多数あります。ただし、RAM に悪影響を与える可能性があるため、各ファイルを一度に読み取るのではなく、チャンクごとに読み取りたいと考えています。どうやってやるの?ドキュメントでは、ファイル全体を読み取る従来のアプローチについて説明しています。

Zlib::GzipReader.open('hoge.gz')  do |gz|
  print gz.read
end

File.open('hoge.gz') do |f|
  gz = Zlib::GzipReader.new(f)
  print gz.read
  gz.close
end

解決策

この例はどこにもありません。ドキュメントを読む必要がありました。

require 'zlib'

def read_gz_by_chunk

infile = open("file_name.gz")
rgz = Zlib::GzipReader.new(infile)

   while(!rgz.eof)
     data = rgz.readpartial(256)
     # do stuff
     puts data
   end

end