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)