From: Tanaka Akira Date: 2004-08-13T18:55:45+09:00 Subject: [ruby-dev:24071] Re: Zlib::GzipReader#readpartial In article <873c2rqsrw.fsf@serein.a02.aist.go.jp>, Tanaka Akira writes: > というわけで、その次は Zlib::GzipReader#readpartial を次のように追加す > るのはどうでしょうか。 あ、説明するのを忘れましたが、このパッチには、 Zlib::GzipReader#readpartial を追加する他に、wrap される IO からデータ を読み込む時に readpartial を使うという変更も入っています。 NoMethodError になれば read を呼び出すので互換性の問題はほとんどないは ずです。 これにより、 > % gzip -9 < eval.c | ./ruby -rzlib -e ' > STDOUT.sync = true > r, w = IO.pipe > w.sync = true > ilen = 0 > Thread.new { > begin > loop { > w.print STDIN.sysread(1) > ilen += 1 > Thread.pass > } > rescue EOFError > end > } > io = Zlib::GzipReader.new(r) > begin > loop { p [ilen, io.readpartial(4096)] } > rescue EOFError > end > ' というコードのように、パイプの向こうから 1byte しか送られていない場合 でも GzipReader は到着したぶんだけ読み込むことが出来て、伸長できたぶん からユーザに返せるようになるわけです。 -- [田中 哲][たなか あきら][Tanaka Akira]