Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > zlibライブラリ > Zlib::GzipWriterクラス
クラスの継承リスト: Zlib::GzipWriter < Zlib::GzipFile < Object < Kernel < BasicObject
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[permalink][rdoc]io と関連付けられた GzipWriter オブジェクトを作成します。 level, strategy は Zlib::Deflate.new と同じです。 GzipWriter オブジェクトは io に gzip 形式のデータを 逐次ライトします。io には少なくとも、IO#write と 同じ動作をする write メソッドが定義されている必要があります。
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]open(filename, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY) {|gz| ... } -> objectfilename で指定されるファイルを gzip 圧縮データの 書き出し用にオープンします。GzipWriter オブジェクトを返します。 その他詳細は Zlib::GzipWriter.new や Zlib::GzipWriter.wrap と 同じです。
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]wrap(io, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY) {|gz| ... } -> objectio と関連付けられた GzipWriter オブジェクトを作成します。 ブロックが与えられた場合、 それを引数としてブロックを実行します。 ブロックの実行が終了すると、GzipWriter オブジェクトは自動的に クローズされます。関連付けられている IO オブジェクトまで クローズしたくない時は、ブロック中で Zlib::GzipFile#finish メソッドを呼び出して下さい。
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]str を出力します。str が文字列でない場合は to_s を用いて 文字列に変換します。
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]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]gzip ファイルのヘッダーに記録するコメントを指定します。
Zlib::GzipWriter#write 等の書き込み系メソッドを 呼んだ後で指定しようとすると Zlib::GzipFile::Error 例外が 発生します。
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]まだ書き出されていないデータをフラッシュします。
flush は Zlib::Deflate#deflate と同じです。 省略時は Zlib::SYNC_FLUSH が使用されます。 flush に Zlib::NO_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]gzip ファイルのヘッダーに記録する最終更新時間を指定します。
Zlib::GzipWriter#write 等の書き込み系メソッドを 呼んだ後で指定しようとすると Zlib::GzipFile::Error 例外が 発生します。
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]gzip ファイルのヘッダーに記録する元ファイル名を指定します。
Zlib::GzipWriter#write 等の書き込み系メソッドを 呼んだ後で指定しようとすると Zlib::GzipFile::Error 例外が 発生します。
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[permalink][rdoc]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
...
print(*str) -> nil[permalink][rdoc]引数を自身に順に出力します。引数を省略した場合は、$_ を出力します。
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]C 言語の printf と同じように、format に従い引数 を文字列に変換して、自身に出力します。
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]文字 ch を自身に出力します。
ch が数値なら 0 〜 255 の範囲の対応する文字を出力します。 ch が文字列なら、その先頭 1byte を出力します。 どちらでもない場合は、ch.to_int で整数に変換を試みます。
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]各引数を自身に出力し、それぞれの後に改行を出力します。
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]自身に str を出力します。str が文字列でなけ れば to_s による文字列化を試みます。
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