Функция flate.NewWriter

Функция flate.NewWriter создает новый объект, который сжимает данные с использованием алгоритма DEFLATE. В первый параметр мы передаем выходной поток, в который будут записываться сжатые данные. Второй параметр определяет уровень сжатия: flate.BestSpeed для максимальной скорости, flate.BestCompression для максимальной степени сжатия, или flate.DefaultCompression для сбалансированного режима. Возвращаемое значение - указатель на flate.Writer, который позволяет записывать данные для сжатия.

Синтаксис

goflate.NewWriter(w io.Writer, level int) (*flate.Writer, error)

Пример

Давайте создадим компрессор со стандартным уровнем сжатия и запишем строку:

gopackage main

import (
  "bytes"
  "compress/flate"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  writer, err := flate.NewWriter(&buf, flate.DefaultCompression)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer writer.Close()

  writer.Write([]byte("abcde"))
  writer.Close()

  fmt.Println(buf.Bytes())
}

Результат выполнения кода:

go[30 51 75 45 156 2 0 0 0 255 255]

Пример

Давайте используем максимальный уровень сжатия для того же набора данных:

gopackage main

import (
  "bytes"
  "compress/flate"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  writer, err := flate.NewWriter(&buf, flate.BestCompression)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer writer.Close()

  writer.Write([]byte("abcde"))
  writer.Close()

  fmt.Println(buf.Bytes())
}

Результат выполнения кода:

go[30 51 75 45 156 2 0 0 0 255 255]

Пример

Давайте сожмем несколько строк с разными уровнями сжатия:

gopackage main

import (
  "bytes"
  "compress/flate"
  "fmt"
)

func main() {
  data := []byte("12345")

  var fastBuf bytes.Buffer
  fastWriter, _ := flate.NewWriter(&fastBuf, flate.BestSpeed)
  fastWriter.Write(data)
  fastWriter.Close()

  var bestBuf bytes.Buffer
  bestWriter, _ := flate.NewWriter(&bestBuf, flate.BestCompression)
  bestWriter.Write(data)
  bestWriter.Close()

  fmt.Printf("Fast: %d bytes, Best: %d bytes\n",
    fastBuf.Len(), bestBuf.Len())
}

Результат выполнения кода:

go"Fast: 17 bytes, Best: 17 bytes"

Смотрите также

  • функцию flate.NewReader,
    которая создает читатель для распаковки DEFLATE-данных
  • функцию flate.BestSpeed,
    которая задает максимальную скорость сжатия
  • функцию flate.BestCompression,
    которая задает максимальную степень сжатия
  • функцию flate.DefaultCompression,
    которая задает стандартный уровень сжатия