环境:winxp、ruby1.8.6、zlib1.2.3
读取gz文件的代码如下:
#draw_head.rb
require 'zlib'
Zlib::GzipReader.open('test.gz').read
当我们使用上面的代码读取大的gz文件(比如说5M)的时候可能会碰到如下错误,而读取个几百k的gz文件则正常
draw_head.rb:3:in `read': buffer error (Zlib::BufError)
from draw_head.rb:2
>Exit code: 1
解决这个错误的方法就是不用 read 方法,使用readlines 方法,所以在win下使用zlib的时候还是这样使用好了
#draw_head.rb
require 'zlib'
Zlib::GzipReader.open('test.gz').readlines
至于为啥会这样,搞不懂这个是为啥,可能是win下 zlib1.dll 的问题吧。
根据如下的官方文档来看,read 和 readlines 在读取数据这块是一样的
readlines([rs])
读入所有数据后,以行为单位将其转化为数组,并返回该数组。若IO已到达EOF则返回空数组[]。
read([length[, buf]]) ((<ruby 1.7 特性>))
若给出了length时,就读取length字节的内容,然后返回该字符串。若IO已到达EOF则返回nil。
若省略length的话,将读入EOF之前的所有内容。若IO已到达EOF则返回""。
Last modified by vkill on2010/03/12 21:25
读取gz文件的代码如下:
#draw_head.rb
require 'zlib'
Zlib::GzipReader.open('test.gz').read
当我们使用上面的代码读取大的gz文件(比如说5M)的时候可能会碰到如下错误,而读取个几百k的gz文件则正常
draw_head.rb:3:in `read': buffer error (Zlib::BufError)
from draw_head.rb:2
>Exit code: 1
解决这个错误的方法就是不用 read 方法,使用readlines 方法,所以在win下使用zlib的时候还是这样使用好了
#draw_head.rb
require 'zlib'
Zlib::GzipReader.open('test.gz').readlines
至于为啥会这样,搞不懂这个是为啥,可能是win下 zlib1.dll 的问题吧。
根据如下的官方文档来看,read 和 readlines 在读取数据这块是一样的
readlines([rs])
读入所有数据后,以行为单位将其转化为数组,并返回该数组。若IO已到达EOF则返回空数组[]。
read([length[, buf]]) ((<ruby 1.7 特性>))
若给出了length时,就读取length字节的内容,然后返回该字符串。若IO已到达EOF则返回nil。
若省略length的话,将读入EOF之前的所有内容。若IO已到达EOF则返回""。
Last modified by vkill on2010/03/12 21:25
网友评论(0):


