Константа gzip.DefaultCompression

Константа gzip.DefaultCompression задает уровень сжатия, который используется по умолчанию при создании нового gzip.Writer. Она равна значению -1 и соответствует сбалансированному соотношению скорости сжатия и размера результирующих данных.

Константа не требует параметров и используется как аргумент при вызове функции gzip.NewWriterLevel. В пакете compress/gzip также доступны константы для других уровней: gzip.BestSpeed (самая высокая скорость сжатия), gzip.BestCompression (максимальное сжатие) и gzip.NoCompression (без сжатия).

Синтаксис

gogzip.DefaultCompression

Пример использования с gzip.NewWriterLevel

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

gopackage main

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

func main() {
  var buf bytes.Buffer
  writer, err := gzip.NewWriterLevel(&buf, gzip.DefaultCompression)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  message := "Hello, World!"
  _, err = writer.Write([]byte(message))
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  err = writer.Close()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println("Compressed size:", buf.Len())
}

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

goCompressed size: 32

Пример сравнения разных уровней сжатия

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

gopackage main

import (
  "bytes"
  "compress/gzip"
  "fmt"
)

func compressData(level int, data []byte) (int, error) {
  var buf bytes.Buffer
  writer, err := gzip.NewWriterLevel(&buf, level)
  if err != nil {
    return 0, err
  }

  _, err = writer.Write(data)
  if err != nil {
    return 0, err
  }

  err = writer.Close()
  if err != nil {
    return 0, err
  }

  return buf.Len(), nil
}

func main() {
  data := []byte("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.")

  sizeBestSpeed, _ := compressData(gzip.BestSpeed, data)
  sizeDefault, _ := compressData(gzip.DefaultCompression, data)
  sizeBestCompression, _ := compressData(gzip.BestCompression, data)
  sizeNoCompression, _ := compressData(gzip.NoCompression, data)

  fmt.Println("Original size:", len(data))
  fmt.Println("BestSpeed size:", sizeBestSpeed)
  fmt.Println("DefaultCompression size:", sizeDefault)
  fmt.Println("BestCompression size:", sizeBestCompression)
  fmt.Println("NoCompression size:", sizeNoCompression)
}

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

goOriginal size: 123
BestSpeed size: 90
DefaultCompression size: 88
BestCompression size: 85
NoCompression size: 128

Как видно из примера, уровень DefaultCompression дает хороший баланс между скоростью сжатия и размером данных, уступая по степени сжатия только BestCompression, но превосходя BestSpeed.

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

  • константу gzip.BestCompression,
    которая задает максимальную степень сжатия
  • константу gzip.BestSpeed,
    которая задает максимальную скорость сжатия
  • константу gzip.NoCompression,
    которая отключает сжатие
  • функцию gzip.NewWriterLevel,
    которая создает архиватор с указанным уровнем сжатия