使用Zlib压缩ruby中的大文件以获取gzip

我有一个非常大的文件,约。 2亿行数据。

我想用Zlib库压缩它,特别是使用Writer。

一次读取每一行似乎需要花费相当多的时间。 有没有更好的方法来实现这一目标?

这就是我现在所拥有的:

require 'zlib' Zlib::GzipWriter.open('compressed_file.gz') do |gz| File.open(large_data_file).each do |line| gz.write line end gz.close end 

您可以使用IO #read从文件中读取任意长度的块。

 require 'zlib' Zlib::GzipWriter.open('compressed_file.gz') do |gz| File.open(large_data_file) do |fp| while chunk = fp.read(16 * 1024) do gz.write chunk end end gz.close end 

这将以16kb块的forms读取源文件,并将每个压缩块添加到输出流中。 根据您的环境,根据您的喜好调整块大小。