Функция lzw.NewWriter

Функция lzw.NewWriter создает новый LZW-кодировщик, который сжимает данные и записывает их в указанный выходной поток. Первым параметром функция принимает интерфейс io.Writer, в который будут записаны сжатые данные. Вторым параметром указывается порядок следования бит - lzw.LSB или lzw.MSB. Третьим параметром передается количество бит для кодов - значение от 8 до 16.

Синтаксис

golzw.NewWriter(w io.Writer, order lzw.Order, litWidth int) *lzw.Writer

Пример

Давайте создадим LZW-кодировщик и сожмем строку "abcde":

gopackage main

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

func main() {
  var buf bytes.Buffer
  w := lzw.NewWriter(&buf, lzw.LSB, 8)
  w.Write([]byte("abcde"))
  w.Close()

  fmt.Printf("%q", buf.Bytes())
}

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

go"\x00\x84\x86\x82\x00"

Пример

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

gopackage main

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

func main() {
  var buf bytes.Buffer
  w := lzw.NewWriter(&buf, lzw.MSB, 8)
  w.Write([]byte("abcde"))
  w.Close()

  fmt.Printf("%q", buf.Bytes())
}

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

go"\x00\x11\x31\x41\x00"

Пример

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

gopackage main

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

func main() {
  data := []byte("12345")
  var buf bytes.Buffer
  w := lzw.NewWriter(&buf, lzw.LSB, 9)
  w.Write(data)
  w.Close()

  fmt.Printf("Original size: %d, Compressed size: %d",
    len(data), buf.Len())
}

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

go"Original size: 5, Compressed size: 7"

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

  • функцию lzw.NewReader,
    которая создает LZW-декодер для распаковки данных
  • функцию gzip.NewWriter,
    которая создает gzip-кодировщик для сжатия данных
  • функцию zlib.NewWriter,
    которая создает zlib-кодировщик для сжатия данных
  • функцию flate.NewWriter,
    которая создает flate-кодировщик для сжатия данных