2
我想在一个巨大的文件(4演出)上使用Zlib :: Deflate.deflate。这样做存在明显的问题,第一个问题是我无法一次将整个文件加载到内存中。 Zlib :: GzipWriter可以工作,因为它适用于流,但它不是zlib压缩。有任何想法吗?红宝石zlib泄气海量数据
我想在一个巨大的文件(4演出)上使用Zlib :: Deflate.deflate。这样做存在明显的问题,第一个问题是我无法一次将整个文件加载到内存中。 Zlib :: GzipWriter可以工作,因为它适用于流,但它不是zlib压缩。有任何想法吗?红宝石zlib泄气海量数据
你可以尝试实例化一个Zlib :: Deflate流,并从零碎的大文件中提供数据。 Zlib :: Deflate :: deflate声称在幕后做这种事情。
这将是这个样子:
z = Zlib::Deflate.new
File.open "big_uncompressed_file" do |f|
File.open "big_compressed_file", "w" do |w|
f.each do |str|
w << z.deflate str, Zlib::SYNC_FLUSH
end
end
end
z.finish
z.close
的Zlib本身并以这种方式逐步工作 - 你给它的缓存数据的增量和它吐出来压缩数据。 – ConcernedOfTunbridgeWells 2010-04-12 16:41:31
您希望在big_compressed_file(“w”)末尾输出完成。 – toothrot 2013-10-21 15:39:03
@ConcernedOfTunbridgeWells即'w << z.deflate(str,Zlib :: NO_FLUSH)'? @toothrot即'f.write(z.finish)'? – 2016-02-12 23:51:24