Zlib :: GzipReader可以采用"IO或IO类对象".正如它的输入,如文档中所述.
Zlib::GzipReader.open('hoge.gz') {|gz|
print gz.read
}
File.open('hoge.gz') do |f|
gz = Zlib::GzipReader.new(f)
print gz.read
gz.close
end
Run Code Online (Sandbox Code Playgroud)
我应该如何解开字符串?
Gar*_*rth 114
上述方法对我不起作用.
我一直在收到incorrect header check (Zlib::DataError)错误.显然它假设你默认有一个标题,但情况可能并非总是如此.
我实施的工作是:
require 'zlib'
require 'stringio'
gz = Zlib::GzipReader.new(StringIO.new(resp.body.to_s))
uncompressed_string = gz.read
Run Code Online (Sandbox Code Playgroud)
小智 18
Zlib默认情况下假设压缩数据包含标题.如果您的数据不包含标题,则会通过引发Zlib :: DataError而失败.
您可以通过以下解决方法告诉Zlib假设数据没有标头:
def inflate(string)
zstream = Zlib::Inflate.new(-Zlib::MAX_WBITS)
buf = zstream.inflate(string)
zstream.finish
zstream.close
buf
end
Run Code Online (Sandbox Code Playgroud)
dim*_*mus 15
你需要Zlib :: Inflate来解压缩字符串和Zlib :: Deflate来进行压缩
def inflate(string)
zstream = Zlib::Inflate.new
buf = zstream.inflate(string)
zstream.finish
zstream.close
buf
end
Run Code Online (Sandbox Code Playgroud)
小智 7
zstream = Zlib :: Inflate.new(16 + Zlib :: MAX_WBITS)
在Rails中,您可以使用:
ActiveSupport::Gzip.compress("my string")ActiveSupport::Gzip.decompress().小智 5
使用(-Zlib::MAX_WBITS),我ERROR: invalid code lengths set和ERROR: invalid block type
我的唯一以下工作了.
Zlib::GzipReader.new(StringIO.new(response_body)).read
Run Code Online (Sandbox Code Playgroud)