我有几百MB的文件需要压缩。我本身不需要浏览该文件,因此我可以自由使用system
或使用Zlib
,就像解释的in this SO question一样。
我倾向于system
,因为我的红宝石程序不必费心读取它并使其膨胀,因此请使用众所周知的gzip命令在系统中运行。另外,我获得退出状态,所以我知道它的状态。
我缺少什么?有这方面的最佳实践吗?有漏洞吗?
如果您将使用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。我们不需要存储任何压缩文件。