2

大量のファイル (4 GB) で Zlib::Deflate.deflate を使用しようとしています。これには明らかな問題があります。その 1 つは、ファイル全体を一度にメモリにロードできないことです。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 に答える