...

パッケージ lzw

import "compress/lzw"
概要
目次

概要 ▾

lzw パッケージは Lempel-Ziv-Welch 圧縮データフォーマットを実装します。 このフォーマットは以下の記事で記述されています。 T. A. Welch, “A Technique for High-Performance Data Compression”, Computer, 17(6) (June 1984), pp 8-19.

特に,GIF や PDF ファイルフォーマットで使われている LZW を実装します。 つまり,12 ビットまでの長さ可変コードで,最初の 2 つの非リテラルコードは クリアコードと EOF コードです。

TIFF ファイルフォーマットは,類似した,しかし互換性のないバージョンの LZW アルゴリズムを使っています。 golang.org/x/image/tiff/lzw に実装があります。

func NewReader

func NewReader(r io.Reader, order Order, litWidth int) io.ReadCloser

NewReader は新しい io.ReadCloser を作成します。 返り値の io.ReadCloser からの Read は, r からデータを読み取り,解凍します。 r が io.ByteReader を実装していない場合,解凍器は r から必要以上のデータを読み取る可能性があります。 読み終わったら ReadCloser の Close を呼び出すのは呼び出し側の責任です。 リテラルコードに使用するビット数 litWidth は, [2,8] の範囲内でなければならず,通常は 8 です。 これは,圧縮中に使用される litWidth と等しくなければなりません。

func NewWriter

func NewWriter(w io.Writer, order Order, litWidth int) io.WriteCloser

NewWriter は新しい io.WriteCloser を作成します。 返された io.WriteCloser への書き込みは圧縮されて, w に書き込まれます。 書き込みが終わったら WriteCloser の Close を呼び出すのは呼び出し側の責任です。 リテラルコードに使用するビット数 litWidth は [2,8] の範囲内でなければならず,通常は 8 です。 入力バイトは 1<<litWidth 未満でなければなりません。

type Order

Order は, LZW データストリームのビット順序を指定します。

type Order int
const (
    // LSB は,GIF ファイル形式で使用されているように,最下位ビットファーストを意味します。
    LSB Order = iota
    // MSB は,TIFF および PDF ファイル形式で使用されているように, 最上位ビットファーストを意味します。
    MSB
)