Функция flate.NewReader

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

Синтаксис

goflate.NewReader(r io.Reader) io.ReadCloser

Пример

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

gopackage main

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

func main() {
  // Сжатые данные DEFLATE для строки "abcde"
  compressed := []byte{0x0a, 0x45, 0x4c, 0x4f, 0x4c, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff}
  buf := bytes.NewReader(compressed)

  // Создаем reader для декомпрессии
  r := flate.NewReader(buf)
  defer r.Close()

  // Читаем распакованные данные
  res, err := io.ReadAll(r)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println(string(res))
}

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

go"abcde"

Пример

Давайте продемонстрируем чтение данных порциями при декомпрессии:

gopackage main

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

func main() {
  // Сжатые данные DEFLATE для строки "12345"
  compressed := []byte{0x0a, 0x45, 0x4c, 0x4f, 0x4c, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff}
  buf := bytes.NewReader(compressed)

  // Создаем reader для декомпрессии
  r := flate.NewReader(buf)
  defer r.Close()

  // Читаем данные порциями по 2 байта
  p := make([]byte, 2)
  res := ""
  for {
    n, err := r.Read(p)
    if err == io.EOF {
      break
    }
    if err != nil {
      fmt.Println("Error:", err)
      return
    }
    res += string(p[:n])
  }

  fmt.Println(res)
}

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

go"12345"

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

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