我有一些相当大的 .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
这就是我所做的。基本上,此方法用于从 URL 获取 json.gz,然后将其分块读取为字符串,然后将其解析为 JSON。您不必下载 json.gz 您只需引用您的文件即可。我认为有人可以用它来构建自己的方法。
require 'zlib'
def parse_large_json_gz_file()
gz_file = # reference your file here
json_string = ''
file = Zlib::GzipReader.open(gz_file)
until file.eof?
json_string += file.readpartial(1024 * 1024)
end
JSON.parse(json_string)
end