此代码使用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
进行类似的压缩?
答案 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