Функция flate.NewReader
Функция flate.NewReader создает новый объект для чтения и декомпрессии данных,
которые были сжаты с использованием алгоритма DEFLATE. В единственный параметр
функция принимает интерфейс io.Reader, из которого будут считываться
сжатые данные. Возвращаемое значение реализует интерфейс io.ReadCloser,
что позволяет читать распакованные данные и закрывать reader после использования.
Синтаксис
flate.NewReader(r io.Reader) io.ReadCloser
Пример
Давайте создадим reader для декомпрессии данных из сжатого буфера:
package 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))
}
Результат выполнения кода:
"abcde"
Пример
Давайте продемонстрируем чтение данных порциями при декомпрессии:
package 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)
}
Результат выполнения кода:
"12345"
Смотрите также
-
функцию
flate.NewWriter,
которая создает writer для сжатия данных алгоритмом DEFLATE -
функцию
gzip.NewReader,
которая создает reader для декомпрессии данных в формате gzip -
функцию
zlib.NewReader,
которая создает reader для декомпрессии данных в формате zlib -
функцию
compress/flate,
которая предоставляет описание пакета flate в целом