https://github.com/dearblue/ruby-extbzip3
Ruby bindings for bzip3
https://github.com/dearblue/ruby-extbzip3
Last synced: 2 months ago
JSON representation
Ruby bindings for bzip3
- Host: GitHub
- URL: https://github.com/dearblue/ruby-extbzip3
- Owner: dearblue
- License: bsd-2-clause
- Created: 2023-08-19T02:51:54.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2023-08-19T04:37:13.000Z (almost 2 years ago)
- Last Synced: 2025-03-13T06:36:42.505Z (3 months ago)
- Language: C
- Size: 20.5 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
extbzip3 - bzip3 for Ruby
=========================This document is written in Japanese.
[bzip3](https://github.com/kspalaiologos/bzip3) の非公式 Ruby バインディングです。
できること
----------- `require "extbzip3"`
- `Bzip3` module| method | annotation
| ----- | -----
| `Bzip3.decode(str, ...)` | see `Bzip3::Decoder.decode`
| `Bzip3.encode(str, ...)` | see `Bzip3::Encoder.encode`
| `Bzip3.decode(obj, ...)` | see `Bzip3::Decoder.open`
| `Bzip3.encode(obj, ...)` | see `Bzip3::Encoder.open`- `Bzip3::Decoder` class
| method | 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\| ... }` | returns object from yield returned
| `Bzip3::Decoder#read(size = nil, dest = "")` | returns dest with bzip3 decoded
| `Bzip3::Decoder#close` |
| `Bzip3::Decoder#eof?` |- `Bzip3::Encoder` class
| method | 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\| ... }` | returns object from yield returned
| `Bzip3::Encoder#write(src)` | returns receiver
| `Bzip3::Encoder#flush` | returns receiver
| `Bzip3::Encoder#close` |
| `Bzip3::Encoder#eof?` |- `Bzip3::BlockProcessor` class
| method | annotation
| ----- | -----
| `Bzip3::BlockProcessor.new(blocksize)` |
| `Bzip3::BlockProcessor#decode(src, dest, original_size)` | returns `dest` string as original data
| `Bzip3::BlockProcessor#encode(src, dest)` | returns `dest` string as bzip3'ed data
| `Bzip3::BlockProcessor#blocksize` | returns `blocksize` integer with when `new`- `using Bzip3` (refinements)
| method | annotation
| ----- | -----
| `String#to_bzip3(...)` | see `Bzip3::Encoder.encode`
| `String#bunzip3(...)` | see `Bzip3::Decoder.decode`
| `Object#to_bzip3(...)` | see `Bzip3::Encoder.open`
| `Object#bunzip3(...)` | see `Bzip3::Decoder.open`### データ形式について
- extbzip3 は [「bzip3 ファイル形式」](https://github.com/kspalaiologos/bzip3/blob/1.3.1/doc/file_format.md) を標準で扱います。
利用者は特別な操作や指定を行う必要がありません。
- extbzip3 は [「bzip3 ブロック形式」](https://github.com/kspalaiologos/bzip3/blob/1.3.1/doc/low_level_format.md) を扱うことも出来ます。
`Bzip3::BlockProcessor` クラスを使ってください。
- extbzip3 は [「bzip3 フレーム形式」](https://github.com/kspalaiologos/bzip3/blob/1.3.1/doc/high_level_format.md) を扱うことも出来ます。
文字列を圧縮・伸長する特異メソッド `Bzip3::Encoder.encode` または `Bzip3::Decoder.decode` にキーワード引数として `format: Bzip3::V1_FRAME_FORMAT` を与えてください。
ストリーム指向 API を「bzip3 フレーム形式」に対応させる予定はありません。つかいかた
----------### 導入
事前にシステム上へ [bzip3](https://github.com/kspalaiologos/bzip3) をインストールしてください。
```console
% sudo gem install extbzip3
```### 単発圧縮・伸長
```ruby
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"
```### ストリーミング圧縮と伸長
```ruby
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 フレーム形式による単発圧縮・伸長
```ruby
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:
- Licensing: [2-clause BSD License](LICENSE) by [dearblue](https://github.com/dearblue)
- Version: 0.0.1
- Project status: CONCEPT
- Dependency gems: none
- Dependency external C libraries:
- [bzip3](https://github.com/kspalaiologos/bzip3)
version 1.3.2 or later
under [GNU Lesser General Public License version 3 or later](https://github.com/kspalaiologos/bzip3/blob/master/LICENSE)
by [Kamila Szewczyk](https://github.com/kspalaiologos)
and [Apache License, Version 2.0](https://github.com/kspalaiologos/bzip3/blob/master/libsais-LICENSE)
by [Ilya Grebnov](https://github.com/IlyaGrebnov)
and [Kamila Szewczyk](https://github.com/kspalaiologos)
- Bundled external C libraries: none