github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/compress/flate/deflate.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  package flate
     6  
     7  import (
     8  	"github.com/shogo82148/std/io"
     9  )
    10  
    11  const (
    12  	NoCompression      = 0
    13  	BestSpeed          = 1
    14  	BestCompression    = 9
    15  	DefaultCompression = -1
    16  
    17  	// HuffmanOnlyは、Lempel-Zivマッチ検索を無効化し、Huffmanエントロピー符号化のみを実行します。このモードは、すでにLZスタイルのアルゴリズム(例:SnappyやLZ4)で圧縮されたデータを圧縮する際に便利ですが、それにはエントロピー符号化が欠けています。特定のバイトが入力ストリームで他のバイトよりも頻繁に発生する場合、圧縮率が向上します。
    18  	// HuffmanOnlyは、圧縮された出力をRFC 1951に準拠して生成します。つまり、有効なDEFLATEデコンプレッサーは、この出力を引き続き解凍できるようになります。
    19  	HuffmanOnly = -2
    20  )
    21  
    22  // NewWriter は指定されたレベルでデータを圧縮する新しい [Writer] を返します。
    23  // zlib に従って、レベルは 1 ([BestSpeed]) から 9 ([BestCompression]) の範囲です。
    24  // より高いレベルでは一般的に圧縮がより効率的ですが、速度は遅くなります。
    25  // レベル 0 ([NoCompression]) では圧縮は試みず、必要な DEFLATE フレーミングのみが追加されます。
    26  // レベル -1 ([DefaultCompression]) はデフォルトの圧縮レベルを使用します。
    27  // レベル -2 ([HuffmanOnly]) は Huffman 圧縮のみを使用し、全ての入力の圧縮を非常に高速化しますが、
    28  // 圧縮効率を犠牲にします。
    29  //
    30  // もし level が [-2, 9] の範囲にある場合、返されたエラーは nil になります。
    31  // そうでない場合、返されたエラーは nil ではありません。
    32  func NewWriter(w io.Writer, level int) (*Writer, error)
    33  
    34  // NewWriterDictは [NewWriter] と似ていますが、新しい [Writer] をプリセット辞書で初期化します。返された [Writer] は、圧縮された出力を生成せずに、辞書が書き込まれたかのように振る舞います。wに書き込まれた圧縮データは、同じ辞書で初期化されたReaderでのみ解凍することができます。
    35  func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error)
    36  
    37  // Writerは、書き込まれたデータを受け取り、そのデータの圧縮された形式を基になるWriterに書き込む。 ([NewWriter] を参照してください)。
    38  type Writer struct {
    39  	d    compressor
    40  	dict []byte
    41  }
    42  
    43  // Writeは、wにデータを書き込み、その後データの圧縮形式を基になるライターに書き込みます。
    44  func (w *Writer) Write(data []byte) (n int, err error)
    45  
    46  // Flushは、保留中のデータを基礎となるライターにフラッシュします。
    47  // 主に圧縮されたネットワークプロトコルで有用であり、リモートのリーダーがパケットを再構築するのに十分なデータがあることを確保します。
    48  // データが書き込まれるまで、Flushは処理を返しません。
    49  // パンディングのないデータでFlushを呼び出すと、 [Writer] は少なくとも4バイトの同期マーカーを出力します。
    50  // 基礎となるライターがエラーを返す場合、Flushはそのエラーを返します。
    51  //
    52  // zlibライブラリの用語では、FlushはZ_SYNC_FLUSHと等価です。
    53  func (w *Writer) Flush() error
    54  
    55  // Close は書き込みバッファをフラッシュしてクローズします。
    56  func (w *Writer) Close() error
    57  
    58  // Resetは、ライターの状態を破棄し、dstとwのレベルと辞書を使用して [NewWriter] または [NewWriterDict] が呼び出された結果と同じ状態にします。
    59  func (w *Writer) Reset(dst io.Writer)