要約
gzip 形式の圧縮ファイルを書き出すラッパークラスです。 IO クラスのインスタンス (又は IO クラスのインスタンスと同じメソッドを持つオブジェクト) と関連付けて使用します。
require 'zlib' Zlib::GzipWriter.open('hoge.gz') {|gz| gz.write 'jugemu jugemu gokou no surikire...' } f = File.open('hoge.gz', 'w') gz = Zlib::GzipWriter.new(f) gz.write 'jugemu jugemu gokou no surikire...' gz.close
なお、Ruby の finalizer の制約のため、GzipWriter オブジェクトは必ず Zlib::GzipWriter#close 等を用いてクローズしてください。そうしなければフッターを書き出すことができず、壊れた gzip ファイルを生成してしまう可能性があります。
目次
- 特異メソッド
- インスタンスメソッド
継承しているメソッド
特異メソッド
new(io, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY) -> Zlib::GzipWriter
[permalink][rdoc][edit]-
io と関連付けられた GzipWriter オブジェクトを作成します。 level, strategy は Zlib::Deflate.new と同じです。 GzipWriter オブジェクトは io に gzip 形式のデータを逐次ライトします。io には少なくとも、IO#write と同じ動作をする write メソッドが定義されている必要があります。
- [PARAM] io:
- IOオブジェクト、もしくは少なくとも、 IO#write と 同じ動作をする write メソッドが定義されている必要があります。
- [PARAM] level:
- 0-9の範囲の整数を指定します。詳細はzlib.hを参照してください。
- [PARAM] strategy:
- Zlib::FILTERED, Zlib::HUFFMAN_ONLY, Zlib::DEFAULT_STRATEGYなど指定します。詳細はzlib.h を>参照してください。
require 'zlib' filename='hoge1.gz' f = File.open(filename, "w") gz = Zlib::GzipWriter.new(f) gz.puts "hogehoge" * 100 gz.close p gz.closed? #=> true p FileTest.size(filename) #=> 32
open(filename, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY) -> Zlib::GzipWriter
[permalink][rdoc][edit]open(filename, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY) {|gz| ... } -> object
-
filename で指定されるファイルを gzip 圧縮データの書き出し用にオープンします。GzipWriter オブジェクトを返します。その他詳細は Zlib::GzipWriter.new や Zlib::GzipWriter.wrap と同じです。
- [PARAM] filename:
- ファイル名を文字列で指定します。
- [PARAM] level:
- 0-9の範囲の整数、または Zlib::NO_COMPRESSION, Zlib::BEST_SPEED, Zlib::BEST_COMPRESSION, Zlib::DEFAULT_COMPRESSION を指定します。詳細はzlib.hを参照してください。
- [PARAM] strategy:
- Zlib::FILTERED, Zlib::HUFFMAN_ONLY, Zlib::DEFAULT_STRATEGYなど指定します。詳細はzlib.h を参照してください。
require 'zlib' filename='hoge1.gz' gz = Zlib::GzipWriter.open(filename) gz.puts "hogehoge" * 100 gz.close p gz.closed? #=> true p FileTest.size(filename) #=> 32
wrap(io, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY) -> Zlib::GzipWriter
[permalink][rdoc][edit]wrap(io, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY) {|gz| ... } -> object
-
io と関連付けられた GzipWriter オブジェクトを作成します。ブロックが与えられた場合、それを引数としてブロックを実行します。ブロックの実行が終了すると、GzipWriter オブジェクトは自動的にクローズされます。関連付けられている IO オブジェクトまでクローズしたくない時は、ブロック中で Zlib::GzipFile#finish メソッドを呼び出して下さい。
- [PARAM] io:
- IOオブジェクト、もしくは少なくとも、 IO#write と 同じ動作をする write メソッドが定義されている必要があります。
- [PARAM] level:
- 0-9の範囲の整数を指定します。詳細はzlib.hを参照してください。
- [PARAM] strategy:
- Zlib::FILTERED, Zlib::HUFFMAN_ONLY, Zlib::DEFAULT_STRATEGYなど指定します。詳細はzlib.h を参照してください。
require 'zlib' def case1 filename='hoge1.txt' f = File.open(filename, "w") Zlib::GzipWriter.wrap(f, Zlib::NO_COMPRESSION){|gz| gz.puts "hogehoge" * 100 } p f.closed? #=> true p FileTest.size(filename) #=> 824 end def case2 filename='hoge1.gz' f = File.open(filename, "w") Zlib::GzipWriter.wrap(f, Zlib::BEST_COMPRESSION){|gz| gz.puts "hogehoge" * 100 gz.finish } p f.closed? #=> false f.close p FileTest.size(filename) #=> 32 end case1 case2
インスタンスメソッド
self << str -> self
[permalink][rdoc][edit]-
str を出力します。str が文字列でない場合は to_s を用いて文字列に変換します。
- [PARAM] str:
- 出力したいオブジェクトを与えます。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz << "hoge" << "fuga" } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.read } #=> hogefuga
[SEE_ALSO] IO#<<
close -> File
[permalink][rdoc][edit]finish -> File
-
フッターを書き出し、GzipWriter オブジェクトをクローズします。close と finish の違いは Zlib::GzipFile#close, Zlib::GzipFile#finish を参照して下さい。
注意: Ruby の finalizer の制約のため、GzipWriter オブジェクトは必ずクローズしてください。そうしなければフッターを書き出すことができず、壊れた gzip ファイルを生成してしまう可能性があります。
require 'zlib' def case_finish filename='hoge1.gz' gz = Zlib::GzipWriter.open(filename, 9) gz.puts "hogehoge\n" * 100 f = gz.finish p f.atime # 例 #=> Sun Jul 06 15:43:57 +0900 2008 end def case_close filename='hoge1.gz' gz = Zlib::GzipWriter.open(filename, 9) gz.puts "hogehoge\n" * 100 f = gz.close begin p f.atime rescue IOError => err puts err #=> closed stream end end case_finish case_close
comment=(string)
[permalink][rdoc][edit]-
gzip ファイルのヘッダーに記録するコメントを指定します。
Zlib::GzipWriter#write 等の書き込み系メソッドを呼んだ後で指定しようとすると Zlib::GzipFile::Error 例外が発生します。
- [PARAM] string:
- gzip ファイルのヘッダーに記録するコメントを文字列で指定します。
- [RETURN]
- string を返します。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.comment = "hogehoge" p gz.comment #=> "hogehoge" } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.comment #=> hogehoge }
flush(flush = Zlib::SYNC_FLUSH) -> self
[permalink][rdoc][edit]-
まだ書き出されていないデータをフラッシュします。
flush は Zlib::Deflate#deflate と同じです。省略時は Zlib::SYNC_FLUSH が使用されます。 flush に Zlib::NO_FLUSH を指定することは無意味です。
- [PARAM] flush:
- Zlib::NO_FLUSH Zlib::SYNC_FLUSH Zlib::FULL_FLUSH などを指定します。
require 'zlib' def case1 filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.puts "fuga" gz.puts "ugo" } p File.read(filename) end def case2 filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.puts "fuga" gz.flush gz.puts "ugo\n" gz.flush } p File.read(filename) end case1 #=> "\037\213\b\000p\257pH\002\003K+MO\344*M\317\347\002\000<\326\000\371\t\000\000\000" case2 #=> "\037\213\b\000p\257pH\002\003J+MO\344\002\000\000\000\377\377*M\317\347\002\000\000\000\377\377\003\000<\326\000\371\t\000\000\000"
mtime=(time)
[permalink][rdoc][edit]-
gzip ファイルのヘッダーに記録する最終更新時間を指定します。
Zlib::GzipWriter#write 等の書き込み系メソッドを呼んだ後で指定しようとすると Zlib::GzipFile::Error 例外が発生します。
- [PARAM] time:
- gzip ファイルのヘッダーに記録する最終更新時間を整数で指定します。
- [RETURN]
- time を返します。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| p gz.mtime = 1 #=> 1 } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.mtime # 例 #=> Thu Jan 01 09:00:01 +0900 1970 }
orig_name=(filename)
[permalink][rdoc][edit]-
gzip ファイルのヘッダーに記録する元ファイル名を指定します。
Zlib::GzipWriter#write 等の書き込み系メソッドを呼んだ後で指定しようとすると Zlib::GzipFile::Error 例外が発生します。
- [PARAM] filename:
- gzip ファイルのヘッダーに記録する元ファイル名を文字列で指定します。
- [RETURN]
- filename を返します。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.orig_name = "hogehoge" p gz.orig_name #=> "hogehoge" } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.orig_name #=> hogehoge }
pos -> Integer
[permalink][rdoc][edit]tell -> Integer
-
現在までに圧縮したデータの長さの合計を返します。ファイルポインタの位置ではないことに注意して下さい。
require 'zlib' filename='hoge1.gz' f = File.open(filename, "w") Zlib::GzipWriter.wrap(f, Zlib::BEST_COMPRESSION){|gz| (1..10).each {|i| gz.print i puts gz.pos } } #=> 1 #=> 2 #=> 3 ...
print(*str) -> nil
[permalink][rdoc][edit]-
引数を自身に順に出力します。引数を省略した場合は、$_ を出力します。
- [PARAM] str:
- 出力するオブジェクトを指定します。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.print "ugo" } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.read } #=> ugo
[SEE_ALSO] IO#print, Kernel.#print
printf(format, *args) -> nil
[permalink][rdoc][edit]-
C 言語の printf と同じように、format に従い引数を文字列に変換して、自身に出力します。
- [PARAM] format:
- フォーマット文字列を指定します。sprintf フォーマット を参照してください。
- [PARAM] args:
- フォーマットされるオブジェクトを指定します。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.printf("\n%9s", "bar") } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.read } #=> bar
[SEE_ALSO] IO#printf, Kernel.#printf
putc(ch) -> object
[permalink][rdoc][edit]-
文字 ch を自身に出力します。
ch が数値なら 0 〜 255 の範囲の対応する文字を出力します。 ch が文字列なら、その先頭 1byte を出力します。どちらでもない場合は、ch.to_int で整数に変換を試みます。
- [PARAM] ch:
- 出力する文字を数値または文字列で指定します。
- [RETURN]
- ch を返します。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.putc ?u gz.putc ?g gz.putc ?o } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.read } #=> ugo
[SEE_ALSO] IO#putc, Kernel.#putc
puts(*str) -> nil
[permalink][rdoc][edit]-
各引数を自身に出力し、それぞれの後に改行を出力します。
- [PARAM] str:
- 出力したいオブジェクトを指定します。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.puts "fuga" } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.read } #=> fuga
[SEE_ALSO] IO#puts, Kernel.#puts
write(*str) -> Integer
[permalink][rdoc][edit]-
自身に str を出力します。str が文字列でなければ to_s による文字列化を試みます。
- [PARAM] str:
- 出力する文字列を指定します。文字列でない場合は to_s で文字列に変換します。
- [RETURN]
- 実際に出力できたバイト数を返します。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz.write "foo" } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.read } #=> foo
[SEE_ALSO] IO#write