import "compress/gzip"

RFC 1952で定義されているgzip形式圧縮ファイルの読み込み(そのうち書き込みも)を実装しています。

パッケージファイル

gunzip.go

変数

var ChecksumError os.Error = os.ErrorString("gzip checksum error")
var HeaderError os.Error = os.ErrorString("invalid gzip header")

Inflater型

Inflaterはgzip形式圧縮ファイルを解凍し、データを読み込むio.Readerです。gzipファイルは圧縮されたファイルに関するメタデータを与えるヘッダーを格納します。ヘッダーの中身はInflater型のstructを参照してください。

一般的にgzipファイルは複数のgzipファイルと連結することができます。Inflaterでの読み込みはそれぞれ解凍したデータを連結したものを返します。

gzipファイルは圧縮されていないデータの長さとチェックサムを格納します。Inflaterは圧縮されていないデータの読み込みが終わりに達した際に期待される長さまたはチェックサムを持たない場合はChecksumErrorを返します。クライアントではReadにて正常に全てのデータを読み込んだことを確認してからデータを扱わなければいけません。

type Inflater struct {
    Comment string; // comment
    Extra   []byte; // "extra data"
    Mtime   uint32; // modification time (seconds since January 1, 1970)
    Name    string; // file name
    OS      byte;   // operating system type
    // contains unexported fields
}

NewInflater関数

func NewInflater(r io.Reader) (*Inflater, os.Error)

NewInflaterは与えられたリーダーを読み込み新しいInflaterを作成します。実装しているバッファはrから必要以上のデータを読み込む可能性があります。使い終わったら呼び出し側の責任でCloseを呼び出してください。

(*Inflater) Close関数

func (z *Inflater) Close() os.Error

Closeを呼び出しても、にNewInflaterにパラメータとして与え、ラップしているio.Reader()は閉じません。

(*Inflater) Read関数

func (z *Inflater) Read(p []byte) (n int, err os.Error)