import "compress/gzip"
RFC 1952で定義されているgzip形式圧縮ファイルの読み書きを実装しています。
パッケージファイル
gunzip.go gzip.go
定数
これら定数はflateパッケージからコピーされているため、 “compress/gzip”をインポートしているコードでは”compress/flate”をインポートする必要はありません。
const (
NoCompression = flate.NoCompression
BestSpeed = flate.BestSpeed
BestCompression = flate.BestCompression
DefaultCompression = flate.DefaultCompression
)
変数
var ChecksumError os.Error = os.ErrorString("gzip checksum error")
var HeaderError os.Error = os.ErrorString("invalid gzip header")
Compressor型
Compressorは、 ラップしているio.Writerに圧縮データを書き込むio.WriteCloserです。
type Compressor struct {
Header
// contains unexported fields
}
NewWriter関数
func NewWriter(w io.Writer) (*Compressor, os.Error)
NewWriterは、デフォルトの圧縮レベルでNewWriterLevelを呼び出します。
NewWriterLevel関数
func NewWriterLevel(w io.Writer, level int) (*Compressor, os.Error)
NewWriterLevelは、与えられたwriterに書き込みを行う新しいCompressorを作成します。書き込みはバッファリングされ Closeされるまでフラッシュされません。呼び出し側で、Compressor.Headerのフィールドに値を設定するときは、最初にWriteか Closeを呼び出す前に行う必要があります。使い終わったときは呼び出し側の責任でWriteCloserのCloseを呼び出してください。 levelは圧縮レベルで、DefaultCompression(デフォルト圧縮)、NoCompression(圧縮無し)、または BestSpeed(速度最優先)からBestCompression(圧縮率最優先)の整数値を指定することが可能です。
(*Compressor) Close関数
func (z *Compressor) Close() os.Error
Closeの呼び出しでは、NewWriterにパラメータとして与えたio.Writerはクローズしません。
(*Compressor) Write関数
func (z *Compressor) Write(p []byte) (int, os.Error)
Decompressor型
Decompressorはgzip形式圧縮ファイルからデータを読み込み解凍するio.Readerです。
通常、gzipファイルは複数のgzipファイ ルを結合したもので、それぞれがヘッダを持っています。Decompressorの読み込みでは、各非圧縮データを連結したものが返されますが、Decompressorのフィールドに書き込まれるのは先頭のヘッダだけです。
gzipファイルは圧縮されていないデータの長さとチェックサムを格納します。 Decompressorは圧縮されていないデータの読み込みが終わりに達した際に期待される長さまたはチェックサムを持たない場合はChecksumError を返します。クライアントではReadで正常に全てのデータを読み込んだ(長さが0で、エラーはnil)ことを確認してからデータを扱わなければいけませ ん。
type Decompressor struct {
Header
// contains unexported fields
}
NewReader関数
func NewReader(r io.Reader) (*Decompressor, os.Error)
NewReaderは、与えられたリーダから読み込む新しいDecompressorを作成します。実装しているバッファはrから必要以上のデータを読み込む可能性があります。使い終わったときは呼び出し側の責任でDecompressorのCloseを呼び出してください。
(*Decompressor) Close関数
func (z *Decompressor) Close() os.Error
Closeの呼び出しでは、NewReaderにパラメータとして与えたio.Readerはクローズしません。
(*Decompressor) Read関数
func (z *Decompressor) Read(p []byte) (n int, err os.Error)
Header型
gzipファイルには圧縮ファイルに関するメタデータを持つヘッダが格納されています。このヘッダはCompressor構造体とDecompressor構造体に埋め込まれます。
type Header struct {
Comment string // コメント
Extra []byte // "extra data"
Mtime uint32 // 変更時刻 (1970/1/1からの秒数)
Name string // ファイル名
OS byte // オペレーティングシステムの種類
}
バグ
CommentとNameは、ISO 8859-1 (Latin-1)0×00-0×7f 以外のUTF-8文字コードを正しくマップしません。
Trackback URL
Comments