Spec-Zone.ru › Go

Пакет zlib

  • import "compress/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()

Индекс

  • Константы
  • Переменные
  • Функция NewReader(r io.Reader) (io.ReadCloser, error)
  • Функция NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)
  • Тип Resetter
  • Тип Writer
  • Функция NewWriter(w io.Writer) *Writer
  • Функция NewWriterLevel(w io.Writer, level int) (*Writer, error)
  • Функция NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error)
  • Функция (z *Writer) Close() error
  • Функция (z *Writer) Flush() error
  • Функция (z *Writer) Reset(w io.Writer)
  • Функция (z *Writer) Write(p []byte) (n int, err error)

Примеры

NewReader
NewWriter

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API