Пакет 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")
) Функция NewReader
func NewReader(r io.Reader) (io.ReadCloser, error)
NewReader создаёт новый ReadCloser. Чтение из возвращаемого ReadCloser считывает и распаковывает данные из r. Если r не реализует io.ByteReader, распаковщик может прочитать больше данных, чем необходимо, из r. Ответственность вызывающей стороны — вызвать Close на ReadCloser по завершении работы.
Возвращаемый io.ReadCloser также реализует Resetter.
Пример
Код:
buff := []byte{120, 156, 202, 72, 205, 201, 201, 215, 81, 40, 207,
47, 202, 73, 225, 2, 4, 0, 0, 255, 255, 33, 231, 4, 147}
b := bytes.NewReader(buff)
r, err := zlib.NewReader(b)
if err != nil {
panic(err)
}
io.Copy(os.Stdout, r)
Вывод:
hello, world
Функция NewReaderDict
func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)
NewReaderDict похож на NewReader, но использует предопределённый словарь. NewReaderDict игнорирует словарь, если сжатые данные на него не ссылаются. Если сжатые данные ссылаются на другой словарь, NewReaderDict возвращает ErrDictionary.
ReadCloser, возвращаемый NewReaderDict, также реализует Resetter.
Тип 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
} Тип Writer
Writer принимает данные, записанные в него, и записывает сжатую форму этих данных в базовый writer (см. NewWriter).
type Writer struct {
// contains filtered or unexported fields
}
Функция NewWriter
func NewWriter(w io.Writer) *Writer
NewWriter создаёт новый Writer. Записи в возвращаемый Writer сжимаются и записываются в w.
Ответственность вызывающей стороны — вызвать Close на Writer по завершении работы. Записи могут быть буферизованы и не сброшены до Close.
Пример
Код:
var b bytes.Buffer
w := zlib.NewWriter(&b)
w.Write([]byte("hello, world\n"))
w.Close()
fmt.Println(b.Bytes())
Вывод:
[120 156 202 72 205 201 201 215 81 40 207 47 202 73 225 2 4 0 0 255 255 33 231 4 147]
Функция NewWriterLevel
func NewWriterLevel(w io.Writer, level int) (*Writer, error)
NewWriterLevel подобен NewWriter, но указывает уровень сжатия вместо предполагаемого DefaultCompression.
Уровень сжатия может быть DefaultCompression, NoCompression, HuffmanOnly или любое целое число между BestSpeed и BestCompression включительно. Возвращаемая ошибка будет равна null, если уровень допустим.
Функция NewWriterLevelDict
func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error)
NewWriterLevelDict подобен NewWriterLevel, но указывает словарь для сжатия.
Словарь может быть null. Если нет, его содержимое не должно изменяться до закрытия Writer.
Функция (*Writer) Close
func (z *Writer) Close() error
Close закрывает Writer, сбрасывая все незаписанные данные в базовый io.Writer, но не закрывает базовый io.Writer.
Функция (*Writer) Flush
func (z *Writer) Flush() error
Flush сбрасывает Writer в его базовый io.Writer.
Функция (*Writer) Reset 1.2
func (z *Writer) Reset(w io.Writer)
Reset очищает состояние Writer z так, что оно эквивалентно его начальному состоянию из NewWriterLevel или NewWriterLevelDict, но вместо записи в w.
Функция (*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/