Ruby zlib выкачивает массивные данные - PullRequest
2 голосов
/ 12 апреля 2010

Я пытаюсь использовать Zlib :: Deflate.deflate для массивного файла (4 гигабайта). Есть очевидные проблемы с этим, первая из которых заключается в том, что я не могу загрузить весь файл в память одновременно. Zlib :: GzipWriter будет работать, так как он работает с потоками, но это не сжатие zlib. Есть идеи?

1 Ответ

3 голосов
/ 12 апреля 2010

Вы можете попробовать создать поток 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

ruby ​​zlib docs

примечания о флагах сброса zlib

...