Функция zlib.NewWriter

Функция zlib.NewWriter создает новый объект *zlib.Writer, который сжимает данные в формате zlib и записывает их в переданный io.Writer. В единственный параметр функция принимает выходной поток (io.Writer), в который будут записываться сжатые данные. Возвращаемое значение представляет собой указатель на zlib.Writer, через который производится запись сжатых данных.

Синтаксис

gozlib.NewWriter(w io.Writer) *zlib.Writer

Пример

Давайте сожмем строку "abcde" в формате zlib и запишем результат в буфер:

gopackage main

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

func main() {
  var buf bytes.Buffer
  w := zlib.NewWriter(&buf)

  _, err := w.Write([]byte("abcde"))
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  err = w.Close()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Printf("%x", buf.Bytes())
}

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

go"789c4b2c4e4c55484d2d2e06000408009b"

Пример

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

gopackage main

import (
  "bytes"
  "compress/zlib"
  "fmt"
  "io"
)

func main() {
  original := []byte("abcde")
  var compressed bytes.Buffer

  w := zlib.NewWriter(&compressed)
  w.Write(original)
  w.Close()

  r, err := zlib.NewReader(&compressed)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer r.Close()

  decompressed, err := io.ReadAll(r)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Printf("Original: %s, Decompressed: %s",
    original, decompressed)
}

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

go"Original: abcde, Decompressed: abcde"

Пример

Давайте используем zlib.NewWriter для сжатия данных с записью в файл:

gopackage main

import (
  "compress/zlib"
  "fmt"
  "os"
)

func main() {
  file, err := os.Create("data.zlib")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer file.Close()

  w := zlib.NewWriter(file)
  defer w.Close()

  _, err = w.Write([]byte("abcde"))
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println("Data compressed and written to data.zlib")
}

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

go"Data compressed and written to data.zlib"

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

  • функцию zlib.NewWriterLevel,
    которая создает компрессор zlib с указанным уровнем сжатия
  • функцию zlib.NewReader,
    которая создает Reader для распаковки данных в формате zlib
  • функцию gzip.NewWriter,
    которая создает компрессор в формате gzip
  • функцию flate.NewWriter,
    которая создает компрессор в формате DEFLATE