如何使用Zlib获取整个未压缩的gzip文件?

时间:2015-07-30 23:46:41

标签: ruby gzip zlib

我正在尝试解压缩823,000行文件,但我只收到26,000行文件。我是I / O的新手,出于某种原因,没有理解为什么会这样。这是我的代码:

Zlib::GzipReader.open( file_path ) do |gz|
    puts gz.readlines.count
  end

任何方向都会受到赞赏。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

好的,所以我设法解决了这个问题。 事实证明我使用的服务器日志文件中有大约29个数据流。 Zlib :: GzipReader只读取第一个。为了解决它,我不得不循环直到所有29个流都被读取:

File.open(  file_path ) do |file|
    zio = file
    loop do
      io = Zlib::GzipReader.new( zio )
      uncompressed += io.read
      unused = io.unused # where I'm writing my file
      break if unused.nil?
      zio.pos -= unused.length
    end
  end