From: Katsuhiro Ueno Date: 2000-05-24T21:12:25+09:00 Subject: [ruby-list:22889] Re: zlib うえの@ぶるーすかいです。 高橋さん wrote: > こちらについては、 > > require 'zlib' > > fin = open('zlib.html') > while str = fin.read(1024) > newstr = Deflate.deflate(str) > print newstr > end > fin.close > > みたいなものを書いても、どうも圧縮してくれているようでは > なさそうです(gzip -dc とかやると not in gzip formatとか言わ > れます)。うーん、使い方を間違えているのでしょうか。 間違ってます (^^;;; require 'zlib' fin = open('zlib.html') ds = Deflate.new while str = fin.read(1024) newstr = ds.deflate(str) print newstr end newstr = ds.finish print newstr fin.close または、 fin = open('zlib.html') print Deflate.deflate(fin.read) fin.close です。 # 一気にやるなら Deflate::deflate、 # ボチボチやるなら Deflate#deflate。 # ヤヤこしい… あと、あくまで圧縮/展開だけですから、.gz なヘッダーは吐きません。 なので gzip に叱られるのは当然と言えば当然です。 無理矢理、 src = open('zlib.html').read # add .gz header print [ 0x1f, 0x8b, 8, 0, Time.now.to_i, 0, 3 ].pack('C4VC2') # compress & remove zlib header/footer dst = Deflate.deflate(src) print dst[2, dst.size - 6] # add .gz footer print [ Zlib.crc32(src), src.size ].pack('N*') とすれば、一応 .gz なファイルを吐くことはできます。 # gzFile 系関数を実装すれば幸せになれるのだけど… # ん〜、ヒマ見つけて、やってみます -=====--===- うえの かつひろ @ BLUE-SKYNET --= ---=----===- http://www.blue.sky.or.jp/ -==