【发布时间】:2016-10-14 02:00:35
【问题描述】:
我正在使用 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 GHz i7 上解压缩 10K 大约需要 150 微 秒。
标签: ruby gzip zlib compression