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

Пакет compress/flate

Пакет compress/flate реализует алгоритм сжатия DEFLATE, который используется в форматах gzip и zlib. Пакет предоставляет функции NewReader для распаковки и NewWriter для сжатия данных. При создании Writer можно указать уровень сжатия: от NoCompression до BestCompression. Пакет также поддерживает чтение данных по частям с помощью интерфейса io.Reader и запись через io.Writer.

Создание writer для сжатия

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

package main import ( "bytes" "compress/flate" "fmt" ) func main() { var buf bytes.Buffer writer, err := flate.NewWriter(&buf, flate.BestSpeed) if err != nil { fmt.Println("Error:", err) return } defer writer.Close() data := "abcde" _, err = writer.Write([]byte(data)) if err != nil { fmt.Println("Error:", err) return } writer.Close() fmt.Println(buf.Bytes()) }

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

[229 17 1 44 80 22 14 44 80 22 14 44 80 22 14]

Создание reader для распаковки

Теперь распакуем данные, сжатые в предыдущем примере, с помощью NewReader:

package main import ( "bytes" "compress/flate" "fmt" "io" ) func main() { compressed := []byte{229, 17, 1, 44, 80, 22, 14, 44, 80, 22, 14, 44, 80, 22, 14} reader := flate.NewReader(bytes.NewReader(compressed)) defer reader.Close() decompressed, err := io.ReadAll(reader) if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(decompressed)) }

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

"abcde"

Прямое сжатие и распаковка

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

package main import ( "bytes" "compress/flate" "fmt" "io" ) func main() { var compressed bytes.Buffer writer, _ := flate.NewWriter(&compressed, flate.DefaultCompression) writer.Write([]byte("abcde")) writer.Close() reader := flate.NewReader(&compressed) decompressed, _ := io.ReadAll(reader) reader.Close() fmt.Println(string(decompressed)) }

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

"abcde"

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

  • пакет compress/gzip,
    который использует DEFLATE с дополнительными заголовками
  • пакет compress/zlib,
    который также базируется на алгоритме DEFLATE
  • пакет compress/bzip2,
    реализующий другой алгоритм сжатия
  • пакет compress/lzw,
    реализующий алгоритм сжатия LZW
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить