vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

win 下 Zlib::GzipReader 提示 buffer error (Zlib::BufError) 的解决

21:25 , vkill
环境: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
类别:ruby & rails | Tags: , , , , | 0 条评论, 1101 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: