Функция gzip.NewReader
Функция gzip.NewReader создает новый ридер для чтения данных, сжатых в формате gzip.
В единственный параметр функция принимает интерфейс io.Reader, который представляет собой
источник сжатых данных. Функция возвращает указатель на структуру gzip.Reader и ошибку,
которая возникает при неудачном чтении заголовка gzip.
Синтаксис
gzip.NewReader(r io.Reader) (*gzip.Reader, error)
Пример
Давайте прочитаем сжатые gzip данные из файла:
package main
import (
"compress/gzip"
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("data.gz")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
gzReader, err := gzip.NewReader(file)
if err != nil {
fmt.Println("Error creating gzip reader:", err)
return
}
defer gzReader.Close()
data, err := io.ReadAll(gzReader)
if err != nil {
fmt.Println("Error reading data:", err)
return
}
fmt.Println(string(data))
}
Результат выполнения кода:
"Hello, World!"
Пример
Давайте прочитаем gzip данные из строки, используя strings.NewReader:
package main
import (
"compress/gzip"
"fmt"
"io"
"strings"
)
func main() {
// Gzip сжатые данные в виде строки
gzipData := "\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xf2H\xcd\xc9\xc9W(\xcf/\xcaI\x01\x00\x00\x00\xff\xff\x01\x00\x00\xff\xff\xe1\x05\x00\x00"
reader := strings.NewReader(gzipData)
gzReader, err := gzip.NewReader(reader)
if err != nil {
fmt.Println("Error creating gzip reader:", err)
return
}
defer gzReader.Close()
data, err := io.ReadAll(gzReader)
if err != nil {
fmt.Println("Error reading data:", err)
return
}
fmt.Println(string(data))
}
Результат выполнения кода:
"Hello World"
Пример
Давайте прочитаем сжатые данные из байтового буфера:
package main
import (
"bytes"
"compress/gzip"
"fmt"
"io"
)
func main() {
compressedData := []byte{
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xf2, 0x48, 0xcd, 0xc9, 0xc9, 0x57,
0x28, 0xcf, 0x2f, 0xca, 0x49, 0x01, 0x00, 0x00,
0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff,
0xe1, 0x05, 0x00, 0x00,
}
buf := bytes.NewReader(compressedData)
gzReader, err := gzip.NewReader(buf)
if err != nil {
fmt.Println("Error creating gzip reader:", err)
return
}
defer gzReader.Close()
data, err := io.ReadAll(gzReader)
if err != nil {
fmt.Println("Error reading data:", err)
return
}
fmt.Println(string(data))
}
Результат выполнения кода:
"Hello"
Пример
Давайте обработаем ошибку при попытке чтения невалидных gzip данных:
package main
import (
"compress/gzip"
"fmt"
"strings"
)
func main() {
invalidData := strings.NewReader("not a gzip file")
gzReader, err := gzip.NewReader(invalidData)
if err != nil {
fmt.Println("Error:", err)
return
}
defer gzReader.Close()
}
Результат выполнения кода:
"Error: gzip: invalid header"
Смотрите также
-
функцию
gzip.NewWriter,
которая создает ридер для записи gzip-данных -
функцию
gzip.Reader,
которая представляет структуру ридера gzip -
функцию
gzip.Reader.Close,
которая закрывает ридер и освобождает ресурсы -
функцию
gzip.NewWriterLevel,
которая создает ридер с указанным уровнем сжатия