我试图在ruby中使用gzip文件,而不必先将其写入磁盘。目前我只知道如何使用Zlib::GzipWriter
使其工作,但我真的希望我可以避免这种情况并将其保留在内存中。
我试过这个,没有成功:
def self.make_gzip(data)
gz = Zlib::GzipWriter.new(StringIO.new)
gz << data
string = gz.close.string
StringIO.new(string, 'rb').read
end
以下是我测试时会发生的事情:
# Files
normal = File.new('chunk0.nbt')
gzipped = File.new('chunk0.nbt.gz')
# Try to create gzip in program
make_gzip normal
=> "\u001F\x8B\b\u0000\x8AJhS\u0000\u0003S\xB6q\xCB\xCCI\xB52\xA8000OK1L\xB2441J5\xB5\xB0\u0003\u0000\u0000\xB9\x91\xDD\u0018\u0000\u0000\u0000"
# Read from a gzip created with the gzip command
reader = Zlib::GzipReader.open gzipped
reader.read
"\u001F\x8B\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\xED]\xDBn\xDC\xC8\u0011%\x97N\xB82<\x9E\x89\xFF!\xFF!\xC9\xD6dFp\x80\u0005\xB2y\r\"\xEC\n\x89\xB0\xC6\xDAX+A./\xF94\xBF\u0006\xF1\x83>`\u0005\xCC\u000F\xC4\xF0\u000F.............(for 10,000 columns)
答案 0 :(得分:2)
您实际上在以下代码中对normal.to_s
(类似"#<File:0x007f53c9b55b48>"
)进行了解压缩。
# Files
normal = File.new('chunk0.nbt')
# Try to create gzip in program
make_gzip normal
您应该阅读文件的内容,并在内容上阅读make_gzip
:
make_gzip normal.read
正如我评论的那样,make_gzip
可以更新:
def self.make_gzip(data)
gz = Zlib::GzipWriter.new(StringIO.new)
gz << data
gz.close.string
end