2011-12-29 33 views
0

我想用一種方式來包裝一個普通文件,以便從它(以塊爲單位)讀取壓縮數據。如何使用zlib在ruby中實時壓縮文件流

目前:

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) 

感謝

UPDATE:

這個黑客似乎工作,但我敢肯定,它可以用zlib的被儀表:

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

尋找到如何使用zlib的做..

回答

0

如果文件中的數據是分開的行,那麼可以使用each_line()迭代器m ethod

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

也許這可能已經發生在你身上了。

+0

不幸的是它是一個二進制文件,所以我不認爲「each_line」會在這裏工作 – 2011-12-29 18:37:04