Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > zlibライブラリ > Zlib::GzipWriterクラス
class Zlib::GzipWriter
クラスの継承リスト: Zlib::GzipWriter < Zlib::GzipFile < Object < Kernel < BasicObject
Abstract
gzip 形式の圧縮ファイルを書き出すラッパークラスです。 IO クラスのインスタンス (又は IO クラスのインスタンスと同じメソッドを 持つオブジェクト) と関連付けて使用します。
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
-
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
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
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
putc(ch)
puts(*strs)
print(*strs)
printf(format, *args)
write(str)
-
IO クラスの同名メソッドと同じです。詳しくは IO#<<, IO#putc, IO#puts, IO#print, IO#printf, IO#write を参照してください。
require 'zlib' filename='hoge1.gz' fw = File.open(filename, "w") Zlib::GzipWriter.wrap(fw, Zlib::BEST_COMPRESSION){|gz| gz << "hoge" gz.puts "fuga" gz.putc ?u gz.putc ?g gz.putc ?o gz.print "ugo" gz.printf("\n%9s", "bar") gz.write "foo" } fr = File.open(filename) Zlib::GzipReader.wrap(fr){|gz| puts gz.read } #=> hogefuga #=> ugougo #=> barfoo
[SEE_ALSO] IO#<<, IO#putc, IO#puts, IO#print, IO#printf, IO#write
close -> File
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) -> String
-
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
-
まだ書き出されていないデータをフラッシュします。 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) -> Fixnum
-
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) -> String
-
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 -> Fixnum
tell -> Fixnum
-
現在までに圧縮したデータの長さの合計を返します。 ファイルポインタの位置ではないことに注意して下さい。
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 ...