2

我正在尝试在一个大型文件(4 gigs)上使用 Zlib::Deflate.deflate。这样做有明显的问题,第一个问题是我不能一次将整个文件加载到内存中。Zlib::GzipWriter 可以工作,因为它适用于流,但它不是 zlib 压缩。有任何想法吗?

4

1 回答 1

3

你可以尝试实例化一个 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 文档

zlib 刷新标志的注意事项

于 2010-04-12T16:36:59.093 回答