在Ruby中压缩文件-系统与Zlib?

问题描述 投票:1回答:1

我有几百MB的文件需要压缩。我本身不需要浏览该文件,因此我可以自由使用system或使用Zlib,就像解释的in this SO question一样。

我倾向于system,因为我的红宝石程序不必费心读取它并使其膨胀,因此请使用众所周知的gzip命令在系统中运行。另外,我获得退出状态,所以我知道它的状态。

我缺少什么?有这方面的最佳实践吗?有漏洞吗?

ruby gzip zlib
1个回答
0
投票

如果您将使用system命令,则将无法干预压缩。因此,您将无法将压缩的输出重定向到套接字,提供外部进度栏,合并自定义tar存档等。在压缩大文件期间,这些操作可能很重要。

请使用ruby-zstds查看以下示例。

require "socket"
require "zstds"
require "minitar"

TCPSocket.open "google.com", 80 do |socket|
  ZSTDS::Stream::Writer.new socket do |writer|
    Minitar::Writer.open writer do |tar|
      tar.add_file_simple "file.txt" do |tar_writer|
        File.open "file.txt", "r" do |file|
          tar_writer.write(file.read(512)) until file.eof?
        end
      end
      tar.add_file_simple "file2.txt" ...
    end
  end
end

我们正在以流式方式读取file.txt,将其添加到tar存档中,然后立即将部分内容发送给Google。我们不需要存储任何压缩文件。

© www.soinside.com 2019 - 2024. All rights reserved.