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