Пакет zlib
Обзор
Пакет zlib реализует чтение и запись сжатых данных в формате zlib в соответствии со спецификацией RFC 1950.
Реализация предоставляет фильтры, которые распаковывают данные во время чтения и сжимают во время записи. Например, для записи сжатых данных в буфер:
var b bytes.Buffer
w := zlib.NewWriter(&b)
w.Write([]byte("hello, world\n"))
w.Close()
и для обратного чтения этих данных:
r, err := zlib.NewReader(&b) io.Copy(os.Stdout, r) r.Close()
Индекс
Файлы пакета
reader.go writer.go
Константы
Эти константы скопированы из пакета flate, чтобы коду, импортирующему compress/zlib, не требовалось также импортировать compress/flate.
const (
NoCompression = flate.NoCompression
BestSpeed = flate.BestSpeed
BestCompression = flate.BestCompression
DefaultCompression = flate.DefaultCompression
HuffmanOnly = flate.HuffmanOnly
) Переменные
var (
// ErrChecksum is returned when reading ZLIB data that has an invalid checksum.
ErrChecksum = errors.New("zlib: invalid checksum")
// ErrDictionary is returned when reading ZLIB data that has an invalid dictionary.
ErrDictionary = errors.New("zlib: invalid dictionary")
// ErrHeader is returned when reading ZLIB data that has an invalid header.
ErrHeader = errors.New("zlib: invalid header")
) func NewReader
func NewReader(r io.Reader) (io.ReadCloser, error)
NewReader создает новый ReadCloser. Операции чтения из возвращенного ReadCloser считывают и распаковывают данные из r. Если r не реализует io.ByteReader, распаковщик может прочитать из r больше данных, чем необходимо. Вызывающая сторона обязана вызвать Close для ReadCloser по завершении работы.
Интерфейс io.ReadCloser, возвращаемый функцией NewReader, также реализует Resetter.
Пример
Код:
buff := []byte{120, 156, 0, 13, 0, 242, 255, 104, 101, 108, 108, 111,
44, 32, 119, 111, 114, 108, 100, 10, 3, 0, 33, 231, 4, 147}
b := bytes.NewReader(buff)
r, err := zlib.NewReader(b)
if err != nil {
panic(err)
}
io.Copy(os.Stdout, r)
r.Close()
Вывод:
hello, world
func NewReaderDict
func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)
NewReaderDict аналогичен NewReader, но использует предустановленный словарь. NewReaderDict игнорирует словарь, если сжатые данные на него не ссылаются. Если сжатые данные ссылаются на другой словарь, NewReaderDict возвращает ErrDictionary.
ReadCloser, возвращаемый функцией NewReaderDict, также реализует Resetter.
type Resetter 1.4
Resetter сбрасывает ReadCloser, возвращенный функциями NewReader или NewReaderDict, для переключения на новый базовый Reader. Это позволяет повторно использовать ReadCloser вместо выделения нового.
type Resetter interface {
// Reset discards any buffered data and resets the Resetter as if it was
// newly initialized with the given reader.
Reset(r io.Reader, dict []byte) error
} type Writer
Writer принимает записываемые в него данные и записывает их сжатую форму в базовый writer (см. NewWriter).
type Writer struct {
// contains filtered or unexported fields
}
func NewWriter
func NewWriter(w io.Writer) *Writer
NewWriter создает новый Writer. Данные, записываемые в возвращенный Writer, сжимаются и записываются в w.
Вызывающая сторона обязана вызвать Close для Writer по завершении работы. Операции записи могут буферизоваться и не сбрасываться до вызова Close.
Обратите внимание, что точные байты, записанные в w, не подпадают под гарантию совместимости Go 1. Вызывающие стороны, включая тесты, не должны полагаться на точную последовательность записанных байтов.
Пример
Код:
var b bytes.Buffer
w := zlib.NewWriter(&b)
w.Write([]byte("hello, world\n"))
w.Close()
fmt.Println(b.Bytes())
Вывод:
[120 156 0 13 0 242 255 104 101 108 108 111 44 32 119 111 114 108 100 10 3 0 33 231 4 147]
func NewWriterLevel
func NewWriterLevel(w io.Writer, level int) (*Writer, error)
NewWriterLevel аналогичен NewWriter, но указывает уровень сжатия вместо использования DefaultCompression по умолчанию.
Уровень сжатия может быть DefaultCompression, NoCompression, HuffmanOnly или любым целочисленным значением в диапазоне от BestSpeed до BestCompression включительно. Возвращаемая ошибка будет nil, если уровень допустим.
Обратите внимание, что точные байты, записанные в w, не подпадают под гарантию совместимости Go 1. Вызывающие стороны, включая тесты, не должны полагаться на точную последовательность записанных байтов.
func NewWriterLevelDict
func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error)
NewWriterLevelDict аналогичен NewWriterLevel, но задает словарь для сжатия.
Словарь может быть nil. Если нет, его содержимое не должно изменяться до закрытия Writer.
Обратите внимание, что точные байты, записанные в w, не подпадают под гарантию совместимости Go 1. Вызывающие стороны, включая тесты, не должны полагаться на точную последовательность записанных байтов.
func (*Writer) Close
func (z *Writer) Close() error
Close закрывает Writer, сбрасывая все незаписанные данные в базовый io.Writer, но не закрывает сам базовый io.Writer.
func (*Writer) Flush
func (z *Writer) Flush() error
Flush сбрасывает буферизованные данные Writer в базовый io.Writer.
func (*Writer) Reset 1.2
func (z *Writer) Reset(w io.Writer)
Reset сбрасывает состояние Writer z так, что оно становится эквивалентно его начальному состоянию из NewWriterLevel или NewWriterLevelDict, но с записью в w.
func (*Writer) Write
func (z *Writer) Write(p []byte) (n int, err error)
Write записывает сжатую форму p в базовый io.Writer. Сжатые байты не обязательно сбрасываются до тех пор, пока Writer не будет закрыт или сброшен явно.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/compress/zlib/