使用LZMA即时压缩到文件?

时间:2014-05-08 19:59:01

标签: ruby csv lzma

此代码使用Bzip2编写器csv文件压缩动态数据。

File.open('file.bz2', 'wb') do |f|
  writer = Bzip2::Writer.new f
  CSV(writer) do |csv|
    (2**16).times { csv << arr }
  end
  writer.close
end

我想使用lzma算法做同样的事情,而ruby-lzma gem可能很有用,但这个gem只有一种方法compressed = LZMA.compress('data to compress')

问题

有没有办法使用lzma进行类似的压缩?

1 个答案:

答案 0 :(得分:0)

使用具有更好的liblzma接口的ruby-xz(使用FFI)。

lib有XZ::StreamWriter个类。检查docs是否有ruby-xz

但是CSV构造函数不接受XZ::StreamWriter,因此您需要更改代码以使用CSV.generate_line。我能够运行它,它会立即生成文件

require 'xz'
require 'csv'

arr = ['one', 'two', 'three']

File.open('file.xz', 'wb') do |f|
  XZ::StreamWriter.new(f) do |writer|
    (2**16).times { writer << CSV.generate_line(arr) }
    writer.finish
  end
end