2

此代码使用写入器文件压缩动态数据。Bzip2csv

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

4

1 回答 1

0

使用ruby ​​-xz,它对 liblzma 有更好的接口(使用 FFI)。

该库有XZ::StreamWriter类。检查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
于 2016-06-29T10:49:50.493 回答