Функция zlib.NewReader

Функция zlib.NewReader создает новый io.ReadCloser, который позволяет читать распакованные данные из входного потока в формате zlib. В качестве параметра функция принимает io.Reader, содержащий сжатые данные, и возвращает объект для чтения распакованных данных, а также ошибку, если заголовок zlib некорректен.

Синтаксис

gozlib.NewReader(r io.Reader) (io.ReadCloser, error)

Пример

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

gopackage main

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

func main() {
  // Сжимаем данные для примера
  var compressed bytes.Buffer
  writer := zlib.NewWriter(&compressed)
  writer.Write([]byte("abcde"))
  writer.Close()

  // Распаковываем данные
  reader, err := zlib.NewReader(&compressed)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer reader.Close()

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

  fmt.Println(string(res))
}

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

go"abcde"

Пример

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

gopackage main

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

func main() {
  // Некорректные zlib данные
  invalidData := bytes.NewReader([]byte("invalid zlib data"))

  reader, err := zlib.NewReader(invalidData)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer reader.Close()
}

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

go"zlib: invalid header"

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

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