[#23805] net/smtp — 佐藤 大輔 <densuke@...2.so-net.ne.jp>

佐藤です。

26 messages 2000/07/12
[#23806] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23808] Re: net/smtp — 佐藤 大輔 <densuke@...2.so-net.ne.jp> 2000/07/12

佐藤です。

[#23809] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23811] Re: net/smtp — Minero Aoki <aamine@...> 2000/07/12

あおきです。

[#23812] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23890] Ruby Entry Package and cygwin1.dll — Noritsugu Nakamura <nnakamur@...>

25 messages 2000/07/18
[#23895] Re: Ruby Entry Package and cygwin1.dll — WATANABE Hirofumi <eban@...> 2000/07/18

わたなべです.

[#23896] Re: Ruby Entry Package and cygwin1.dll — Noritsugu Nakamura <nnakamur@...> 2000/07/18

[#23897] Re: Ruby Entry Package and cygwin1.dll — Katsuyuki Komatsu <komatsu@...> 2000/07/19

小松です。

[#23898] Re: Ruby Entry Package and cygwin1.dll — WATANABE Hirofumi <eban@...> 2000/07/19

わたなべです.

[#23899] Re: Ruby Entry Package and cygwin1.dll — Katsuyuki Komatsu <komatsu@...> 2000/07/19

小松です。

[#23923] Re: [ruby-dev:10353] Re: should prohibit `module_function' for class Class — Masatoshi SEKI <m_seki@...>

11 messages 2000/07/19

[#23940] String#unpack と scanf の関係 — kiwamu <kiwamu@...>

こんにちは。岡部@東京都立大学と申します。

16 messages 2000/07/20

[ruby-list:23933] Re: flush deflate buffer with Ruby/zlib

From: Ueno Katsuhiro <unnie@...>
Date: 2000-07-20 07:10:40 UTC
List: ruby-list #23933
うえの@ぶるーすかいです。

Ruby/zlib version 0.3.0 をリリースします。

  http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.3.0.tar.gz


From: Tanaka Akira <akr@m17n.org>
> が、([] + (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 にしかなりません。

Deflate.new を使って圧縮する場合、finish メソッドで
圧縮ストリームを明示的に終了させる必要があります。

require 'zlib'

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

deflate = Deflate.new

compressed = deflate.deflate(data1)
compressed += deflate.deflate("", Deflate::SYNC_FLUSH)  # 本質的には不要
compressed2 = deflate.finish
# compressed + compressed2 が有効な圧縮データとなる。
# 「finish が呼ばれて初めて全入力と全出力が対応します」ってヤツです。

inflate = Inflate.new
data2 = inflate.inflate(compressed)
data3 = inflate.inflate(compressed2)
data4 = inflate.finish     # 不要だがエラーチェックになる

print data1.length, "\n"   # => 2893
print data2.length, "\n"   # => 1024
print data3.length, "\n"   # => 1869
print data4.length, "\n"   # => 0


ちなみに、deflate/inflate メソッドの返り値を保存するのが煩わしいなら、
<< メソッドを使って ZStream の内部バッファに保存させ
後で finish や flush_out で一気に取り出す、といったこともできます。


# 個々のクラスやメソッドの解説だけして、実際どのように使うかを
# 解説していないのが Ruby/zlib のドキュメントの悪いところ
# なんですよねぇ…
# 分かってはいるんですが (^^;;


-=====--===-
   うえの かつひろ @ BLUE-SKYNET    <unnie@blue.sky.or.jp>  --=
---=----===-                    http://www.blue.sky.or.jp/  -==

In This Thread