Константа gzip.DefaultCompression
Константа gzip.DefaultCompression задает уровень сжатия,
который используется по умолчанию при создании нового
gzip.Writer. Она равна значению -1 и соответствует
сбалансированному соотношению скорости сжатия и размера
результирующих данных.
Константа не требует параметров и используется как аргумент
при вызове функции gzip.NewWriterLevel. В пакете
compress/gzip также доступны константы для других уровней:
gzip.BestSpeed (самая высокая скорость сжатия),
gzip.BestCompression (максимальное сжатие) и
gzip.NoCompression (без сжатия).
Синтаксис
gzip.DefaultCompression
Пример использования с gzip.NewWriterLevel
Давайте создадим gzip-архиватор с уровнем сжатия по умолчанию и запишем в него строку:
package 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())
}
Результат выполнения кода:
Compressed size: 32
Пример сравнения разных уровней сжатия
Давайте сравним размер сжатых данных при использовании разных уровней сжатия на одной и той же строке:
package 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)
}
Результат выполнения кода:
Original 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,
которая создает архиватор с указанным уровнем сжатия