extbzip3 - bzip3 for Ruby
This document is written in Japanese.
bzip3 の非公式 Ruby バインディングです。
できること
require "extbzip3"Bzip3modulemethod annotation Bzip3.decode(str, ...)see Bzip3::Decoder.decodeBzip3.encode(str, ...)see Bzip3::Encoder.encodeBzip3.decode(obj, ...)see Bzip3::Decoder.openBzip3.encode(obj, ...)see Bzip3::Encoder.openBzip3::Decoderclassmethod annotation Bzip3::Decoder.decode(str, maxdest = nil, dest = "", *opts)returns dest with bzip3 decoded Bzip3::Decoder.decode(str, dest, *opts)returns dest with bzip3 decoded Bzip3::Decoder.open(obj, *opts)returns bzip3 decoder `Bzip3::Decoder.open(obj, *opts) { \ decoder\ Bzip3::Decoder#read(size = nil, dest = "")returns dest with bzip3 decoded Bzip3::Decoder#closeBzip3::Decoder#eof?Bzip3::Encoderclassmethod annotation Bzip3::Encoder.encode(str, maxdest = nil, dest = "", *opts)returns dest with bzip3'ed sequence Bzip3::Encoder.encode(str, dest, *opts)returns dest with bzip3'ed sequence Bzip3::Encoder.open(obj, *opts)returns bzip3 encoder `Bzip3::Encoder.open(obj, *opts) { \ encoder\ Bzip3::Encoder#write(src)returns receiver Bzip3::Encoder#flushreturns receiver Bzip3::Encoder#closeBzip3::Encoder#eof?Bzip3::BlockProcessorclassmethod annotation Bzip3::BlockProcessor.new(blocksize)Bzip3::BlockProcessor#decode(src, dest, original_size)returns deststring as original dataBzip3::BlockProcessor#encode(src, dest)returns deststring as bzip3'ed dataBzip3::BlockProcessor#blocksizereturns blocksizeinteger with whennewusing Bzip3(refinements)method annotation String#to_bzip3(...)see Bzip3::Encoder.encodeString#bunzip3(...)see Bzip3::Decoder.decodeObject#to_bzip3(...)see Bzip3::Encoder.openObject#bunzip3(...)see Bzip3::Decoder.open
データ形式について
- extbzip3 は 「bzip3 ファイル形式」 を標準で扱います。 利用者は特別な操作や指定を行う必要がありません。
- extbzip3 は 「bzip3 ブロック形式」 を扱うことも出来ます。
Bzip3::BlockProcessorクラスを使ってください。 - extbzip3 は 「bzip3 フレーム形式」 を扱うことも出来ます。
文字列を圧縮・伸長する特異メソッド
Bzip3::Encoder.encodeまたはBzip3::Decoder.decodeにキーワード引数としてformat: Bzip3::V1_FRAME_FORMATを与えてください。 ストリーム指向 API を「bzip3 フレーム形式」に対応させる予定はありません。
つかいかた
導入
事前にシステム上へ bzip3 をインストールしてください。
% sudo gem install extbzip3
単発圧縮・伸長
require "extbzip3"
src = "123456789"
bin = Bzip3.encode(src)
# => "BZ3v1\x00\x00\x10\x00\x11\x00\x00\x00\t\x00\x00\x00'F\xE3\xEB\xFF\xFF\xFF\xFF123456789"
src1 = Bzip3.decode(bin)
# => "123456789"
ストリーミング圧縮と伸長
require "extbzip3"
# 圧縮処理してファイルとして出力
File.open("/boot/kernel/kernel", "rb") do |src|
File.open("kernel.bz3", "wb") do |dest|
Bzip3.encode(dest) do |bz3|
buf = ""
bz3.write buf while src.read(123456, buf)
end
end
end
# 伸張処理してファイルとして出力
File.open("kernel.bz3", "rb") do |src|
File.open("kernel.1", "wb") do |dest|
Bzip3.decode(src) do |bz3|
buf = ""
dest.write buf while bz3.read(123456, buf)
end
end
end
# ファイルの比較
system "md5 /boot/kernel/kernel kernel.1"
# => MD5 (/boot/kernel/kernel) = 71b8f6c6a29f4d647f45d9501d549cf3
# => MD5 (kernel.1) = 71b8f6c6a29f4d647f45d9501d549cf3
bzip3 フレーム形式による単発圧縮・伸長
require "extbzip3"
src = "123456789"
bin = Bzip3.encode(src, format: Bzip3::V1_FRAME_FORMAT)
# => "BZ3v1\x00\x00\x10\x00\x01\x00\x00\x00\x11\x00\x00\x00\t\x00\x00\x00'F\xE3\xEB\xFF\xFF\xFF\xFF123456789"
src1 = Bzip3.decode(bin, format: Bzip3::V1_FRAME_FORMAT)
# => "123456789"
しょげん
- Project page: https://github.com/dearblue/ruby-extbzip3
- Licensing: 2-clause BSD License by dearblue
- Version: 0.0.1
- Project status: CONCEPT
- Dependency gems: none
- Dependency external C libraries:
- bzip3 version 1.3.2 or later under GNU Lesser General Public License version 3 or later by Kamila Szewczyk and Apache License, Version 2.0 by Ilya Grebnov and Kamila Szewczyk
- Bundled external C libraries: none