РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1311 of 1593 menu

Тип gzip.Reader

Тип gzip.Reader реализует интерфейс io.Reader для чтения данных, сжатых в формате gzip. Он позволяет распаковывать gzip-архивы и читать их содержимое. Для создания нового читателя используется функция gzip.NewReader, которая принимает в качестве аргумента источник данных (например, файл или сетевой сокет) и возвращает указатель на gzip.Reader.

Синтаксис

gzip.NewReader(r io.Reader) (*gzip.Reader, error)

Метод Read читает распакованные данные в слайс байтов:

func (z *gzip.Reader) Read(p []byte) (n int, err error)

Пример

Давайте создадим gzip-архив и прочитаем его с помощью gzip.Reader:

package main import ( "bytes" "compress/gzip" "fmt" "io" ) func main() { // Создаем буфер и gzip-писатель var buf bytes.Buffer writer := gzip.NewWriter(&buf) // Записываем сжатые данные data := []byte("Hello, Gzip!") _, err := writer.Write(data) if err != nil { fmt.Println("Ошибка записи:", err) return } err = writer.Close() if err != nil { fmt.Println("Ошибка закрытия:", err) return } // Создаем gzip-читатель для распаковки reader, err := gzip.NewReader(&buf) if err != nil { fmt.Println("Ошибка создания читателя:", err) return } defer reader.Close() // Читаем распакованные данные result, err := io.ReadAll(reader) if err != nil { fmt.Println("Ошибка чтения:", err) return } fmt.Println(string(result)) }

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

"Hello, Gzip!"

Пример

Давайте продемонстрируем пошаговое чтение распакованных данных из gzip-архива с использованием метода Read:

package main import ( "bytes" "compress/gzip" "fmt" ) func main() { // Подготавливаем сжатые данные var buf bytes.Buffer writer := gzip.NewWriter(&buf) compressedData := []byte("12345") _, err := writer.Write(compressedData) if err != nil { fmt.Println("Ошибка записи:", err) return } err = writer.Close() if err != nil { fmt.Println("Ошибка закрытия:", err) return } // Создаем gzip-читатель reader, err := gzip.NewReader(&buf) if err != nil { fmt.Println("Ошибка создания читателя:", err) return } defer reader.Close() // Читаем данные по частям chunk := make([]byte, 2) for { n, err := reader.Read(chunk) if n > 0 { fmt.Printf("Прочитано %d байт: %s\n", n, string(chunk[:n])) } if err != nil { break } } }

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

"Прочитано 2 байт: 12" "Прочитано 2 байт: 34" "Прочитано 1 байт: 5"

Пример

Давайте обработаем ошибку при чтении некорректного gzip-архива:

package main import ( "bytes" "compress/gzip" "fmt" ) func main() { // Некорректные gzip-данные invalidData := []byte("not a gzip data") buf := bytes.NewReader(invalidData) // Пытаемся создать gzip-читатель reader, err := gzip.NewReader(buf) if err != nil { fmt.Println("Ошибка:", err) return } defer reader.Close() // Пытаемся прочитать данные result, err := io.ReadAll(reader) if err != nil { fmt.Println("Ошибка чтения:", err) return } fmt.Println(string(result)) }

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

"Ошибка: gzip: invalid header"

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

  • функцию gzip.NewReader,
    которая создает новый читатель для распаковки gzip-данных
  • тип gzip.Writer,
    который используется для сжатия данных в формат gzip
  • метод gzip.Reader.Close,
    который закрывает читатель и освобождает ресурсы
  • пакет compress/gzip,
    в котором определены все функции для работы с gzip
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить