github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/compress/zlib/reader.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 /* 6 パッケージzlibは、RFC 1950で指定されているように、zlib形式の圧縮データの読み書きを実装します。 7 8 この実装は、読み取り中に解凍するフィルターと、書き込み中に圧縮するフィルターを提供します。 9 たとえば、圧縮されたデータをバッファに書き込むには: 10 11 var b bytes.Buffer 12 w := zlib.NewWriter(&b) 13 w.Write([]byte("hello, world\n")) 14 w.Close() 15 16 そして、そのデータを読み戻すには: 17 18 r, err := zlib.NewReader(&b) 19 io.Copy(os.Stdout, r) 20 r.Close() 21 */ 22 package zlib 23 24 import ( 25 "github.com/shogo82148/std/errors" 26 "github.com/shogo82148/std/io" 27 ) 28 29 var ( 30 // ErrChecksumは、無効なチェックサムを持つZLIBデータを読み取る場合に返されます。 31 ErrChecksum = errors.New("zlib: invalid checksum") 32 // ErrDictionaryは、無効な辞書を持つZLIBデータを読み取る場合に返されます。 33 ErrDictionary = errors.New("zlib: invalid dictionary") 34 // ErrHeaderは、無効なヘッダーを持つZLIBデータを読み取る場合に返されます。 35 ErrHeader = errors.New("zlib: invalid header") 36 ) 37 38 // Resetter resets a ReadCloser returned by [NewReader] or [NewReaderDict] 39 // to switch to a new underlying Reader. This permits reusing a ReadCloser 40 // instead of allocating a new one. 41 type Resetter interface { 42 Reset(r io.Reader, dict []byte) error 43 } 44 45 // NewReader creates a new ReadCloser. 46 // Reads from the returned ReadCloser read and decompress data from r. 47 // If r does not implement [io.ByteReader], the decompressor may read more 48 // data than necessary from r. 49 // It is the caller's responsibility to call Close on the ReadCloser when done. 50 // 51 // The [io.ReadCloser] returned by NewReader also implements [Resetter]. 52 func NewReader(r io.Reader) (io.ReadCloser, error) 53 54 // NewReaderDict is like [NewReader] but uses a preset dictionary. 55 // NewReaderDict ignores the dictionary if the compressed data does not refer to it. 56 // If the compressed data refers to a different dictionary, NewReaderDict returns [ErrDictionary]. 57 // 58 // The ReadCloser returned by NewReaderDict also implements [Resetter]. 59 func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)