Ruby zlib库非常慢,无法解压缩gzip文件

时间:2016-10-14 02:00:36

标签: ruby gzip zlib compression

我正在使用Ruby的ZLib库解压缩一个小的(10k)gzip文件(在内存中使用StringIO类),并且大约需要2.5秒才能解压缩。压缩数据需要大约100毫秒,所以我不明白为什么解压缩的时间比压缩函数长。

我的函数接受一个StringIO对象(带有压缩数据的内容)并返回一个数组(3 - 其中' 3'由int_size参数定义)字节整数,如:

def decompress(io, int_size = 3)
  array = Array.new(262144)
  i = 0
  io.rewind
  gz = Zlib::GzipReader.new(io)
  until gz.eof?
    buffer = gz.read(int_size)
    array[i] = buffer.unpack('C*').inject { |r, n| r << 8 | n }
    i += 1
  end
  array
end

同一文件眨眼间在OSX命令行解压缩。

是否有更快的方法来解压缩文件,或者更快的库或者在本地系统上使用gzip的方式来比现在更快地发送

2 个答案:

答案 0 :(得分:0)

我不确定那里发生了什么(我只使用高度压缩的gzip文件重现了缓慢),但是一次解压缩更快,就像这样:

virtual

更快仍然是使用def decompress(io, int_size = 3) array = Array.new(262144) i = 0 io.rewind gz = Zlib::GzipReader.new(io) dec = gz.read seq = StringIO.new(dec, "rb") until seq.eof? buffer = seq.read(int_size) array[i] = buffer.unpack('C*').inject { |r, n| r << 8 | n } i += 1 end array end 而不是循环:

map

答案 1 :(得分:0)

您还可以使用ruby-zstds,它的API与gzip类似。但是zstd的压缩和解压缩速度非常快。请尝试。