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

Gra*_*son 4 ruby gzip zlib

我有一个非常大的文件,约.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
Run Code Online (Sandbox Code Playgroud)

Chr*_*ald 8

您可以使用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
Run Code Online (Sandbox Code Playgroud)

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

  • 我想我知道答案.最新版本的vim会自动解压缩/膨胀文件. (2认同)