In article <20000720123857-664W.unnie / blue.sky.or.jp>,
  Ueno Katsuhiro <unnie / blue.sky.or.jp> writes:

> 多分 (って自分でやったんだが)、安全側に倒していたんだと思います。
> 空文字列を zlib に渡すとバッファの状態によっては
> Z_BUF_ERROR が返ってきますので。
> 
> ちょっと見直してみました。

ありがとうございます。"a" * 1000 の場合にはうまくいきました。
が、([] + (1..1000)).join の場合にはうまくいきません。

require 'zlib'

data1 = ([] + (1..1000)).join

deflate = Deflate.new

compressed = deflate.deflate(data1)
compressed += deflate.deflate("", Deflate::SYNC_FLUSH)

inflate = Inflate.new
data2 = inflate.inflate(compressed)

print data1.length, "\n"
print data2.length, "\n"

とすると、

2893
1024

となります。つまり、展開結果が 1024byte にしかなりません。
# compressed += deflate.deflate("", Deflate::SYNC_FLUSH) をもう一回繰
# り返せばこの場合はうまくいきますが、入力をひと桁増やして ([] +
# (1..10000)).join とするとやはり 1024 になってしまいます。

なんかバッファの大きさかなぁとも思いましたが原因はよくわかりません。

> > flush_out かなぁ、とも思いましたが、やはり意図した結果は得られません。
> > (同様に "" が返ってきます。)
> 
> flush_out は zlib からの出力を受ける ZStream オブジェクト内の
> バッファをフラッシュします。zlib のバッファまではフラッシュしません。

なるほど。
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「まぁ、わたしって、福の神だったのね$(C⊇」(ヘッポコあんてぃ〜く, 清水文化)