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)