如何使用zlib在ruby中动态压缩文件流

时间:2011-12-29 07:41:40

标签: ruby zlib

我想以这样一种方式包装普通文件,即从中读取(以块为单位)会产生压缩数据。

目前:

f = File.open(name)

while(string = f.read(@chunk_size) {
    <do something>
}

我如何使用Zlib使f.read返回压缩数据的@chunk_size?

我找到了一个类似下面的示例,其中'str'可以使用,但它依赖于一次读取整个文件,这是不可能的,因为它可能是一个非常大的文件。

str = StringIO.new()
gz = Zlib::GzipWriter.new(str)
gz.write File.read('local-file.txt')
gz.close

str.string.read(@chunk_size)

感谢

更新:

这个hack似乎有效,但我确信它可以使用Zlib进行检测:

f = File.popen("/bin/gzip < #{name}" )

研究如何处理Zlib ..

1 个答案:

答案 0 :(得分:0)

如果文件中的数据是单独的行,则可以使用each_line()迭代器方法

f = File.new('somefile.txt', 'r')
f.each_line do |line|
  <The compression and storage part>
end

可能这可能已经发生在你身上了。