Ruby-zlibファイル圧縮
Ruby zlibとは
Ruby zlibは、gzipなどで使われている可逆圧縮アルゴリズムのライブラリです。
gzipファイルの読み書きも可能となります。
Ruby zlibはgzipと同様にファイルに対する圧縮/解凍処理を行います。
ディレクトリに対して圧縮する場合には、tarコマンドなどでディレクトリをファイルにまとめ、その後圧縮処理を行う必要があります。
zlibメソッド
文字列の圧縮処理
入力された文字列に対する圧縮処理を行います。
Zlib::Deflate.deflate(string[, level])
- 第1引数に圧縮対象の文字列データを指定します。
- 第2引数で圧縮レベルを指定します。指定引数は以下の通りです。
Zlib::BEST_SPEED | 処理速度を優先して、圧縮率は低くなります |
Zlib::BEST_COMPRESSION | 圧縮率を優先して、処理速度は遅くなります。 |
Zlib::DEFAULT_COMPRESSION | は第2引数を省略したときと同じです。 |
Zlib::NO_COMPRESSION | 圧縮しません。これは既に圧縮されているものなど、追加の圧縮処理が期待できないものをZlibに含める場合などに利用します。 |
使い方は以下の通りです。
require 'zlib'
string = "test message"
data = Zlib::Deflate.deflate(string,Zlib::BEST_SPEED)
文字列の展開(解凍)処理
gz圧縮された文字列に対する展開処理を行います。
Zlib::Inflate.inflate(string)
- 第1引数に展開対象の文字列データを指定します。
使い方は以下の通りです。
require 'zlib'
before = "test message"
archive_data = Zlib::Deflate.deflate(string,Zlib::BEST_SPEED)
after = Zlib::Inflate.inflate(archive_data)
print(after)
gz形式ファイルの読み込み
gzip形式の圧縮ファイルを読み込むラッパークラスを利用します。
IOクラスのインスタンスと関連付けて使用します。
Zlib::GzipReader
ストリームの読み取りのように使用することができます。
require 'zlib'
Zlib::GzipReader.open('sample.gz') do |gz|
p gz.read
end
IOオブジェクトのgzipデータの読み込みは以下のようにwapメソッドを使用します。
require 'zlib'
File.open('sample.gz', 'rb') do |fd|
Zlib::GzipReader.wrap(fd) do |gz|
p gz.read
end
end
gz形式ファイルの書き込み
gzip形式の圧縮ファイルを書き出すラッパークラスです。
IOクラスのインスタンスと関連付けて使用します。
Zlib::GzipWriter
gzipデータへの書き込みは以下の通りです。。
require 'zlib'
Zlib::GzipWriter.open('sample.gz') do |gz|
gz.puts "message"
end
ブロック付きの方法以外に、File.openなどと同じようにブロックなしで呼び出して、後からcloseする使い方も可能です。
ただし、GzipWriterオブジェクトは必ず「Zlib::GzipWriter#close」などを用いてクローズ処理を実行する必要があります。
クローズ処理がなければフッターを書き出すことができず、壊れたgzipファイルを生成してしまう可能性があります。
fd = File.open('sample.gz', 'w')
gz = Zlib::GzipWriter.new(fd)
gz.write string
gz.close
関連ページ
- Ruby
- Ruby-ファイルロック
- Ruby-OpenSSL暗号化
- Ruby-zlibファイル圧縮
- Ruby-ハッシュを作成する
- Ruby-ログのローテーション
- Ruby-YAML形式ファイルを操作する
- Ruby-WEBrickでwebサーバ
- Ruby-CGIでパラメータを受け取る
- Ruby-CGIセッション