Функция lzw.NewReader
Функция lzw.NewReader создает новый объект
io.ReadCloser для чтения LZW-сжатых данных.
В первый параметр она принимает io.Reader,
из которого будут читаться сжатые данные. Во второй
параметр принимает порядок битов в байте -
константу lzw.LSB или lzw.MSB.
В третий параметр принимает размер литерала -
количество бит для кодирования символов.
Функция возвращает io.ReadCloser, который
следует закрыть после чтения.
Синтаксис
lzw.NewReader(r io.Reader, order lzw.Order, litWidth int) io.ReadCloser
Пример
Давайте создадим читатель для LZW-сжатых данных
с порядком битов lzw.MSB и размером литерала 8:
package main
import (
"bytes"
"compress/lzw"
"fmt"
"io"
)
func main() {
// Подготовим сжатые данные
data := []byte{0x4c, 0x5a, 0x57, 0x20, 0x64, 0x61, 0x74, 0x61}
buf := bytes.NewReader(data)
// Создаем читатель для LZW-сжатых данных
reader := lzw.NewReader(buf, lzw.MSB, 8)
// Читаем данные
res, err := io.ReadAll(reader)
if err != nil {
fmt.Println("Error:", err)
return
}
// Закрываем читатель
err = reader.Close()
if err != nil {
fmt.Println("Error closing:", err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
"LZW data"
Пример
Давайте создадим читатель для LZW-сжатых данных
с порядком битов lzw.LSB и размером литерала 9:
package main
import (
"bytes"
"compress/lzw"
"fmt"
"io"
)
func main() {
// Подготовим сжатые данные
data := []byte{0x01, 0x02, 0x03, 0x04, 0x05}
buf := bytes.NewReader(data)
// Создаем читатель для LZW-сжатых данных
reader := lzw.NewReader(buf, lzw.LSB, 9)
// Читаем данные
res, err := io.ReadAll(reader)
if err != nil {
fmt.Println("Error:", err)
return
}
// Закрываем читатель
err = reader.Close()
if err != nil {
fmt.Println("Error closing:", err)
return
}
fmt.Printf("%x\n", res)
}
Результат выполнения кода:
"0102030405"
Пример
Давайте создадим читатель для распаковки LZW-сжатой строки с использованием буфера:
package main
import (
"bytes"
"compress/lzw"
"fmt"
"io"
)
func main() {
// Создаем буфер с LZW-сжатыми данными
var compressed bytes.Buffer
writer := lzw.NewWriter(&compressed, lzw.MSB, 8)
// Записываем данные для сжатия
_, err := writer.Write([]byte("Hello, LZW!"))
if err != nil {
fmt.Println("Error writing:", err)
return
}
// Закрываем writer для завершения сжатия
err = writer.Close()
if err != nil {
fmt.Println("Error closing writer:", err)
return
}
// Создаем читатель для распаковки
reader := lzw.NewReader(&compressed, lzw.MSB, 8)
// Распаковываем данные
res, err := io.ReadAll(reader)
if err != nil {
fmt.Println("Error reading:", err)
return
}
// Закрываем читатель
err = reader.Close()
if err != nil {
fmt.Println("Error closing reader:", err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
"Hello, LZW!"
Смотрите также
-
функцию
lzw.NewWriter,
которая создает писатель для LZW-сжатия данных -
пакет
gzip,
который реализует сжатие в формате gzip -
функцию
flate.NewReader,
которая создает читатель для DEFLATE-сжатых данных -
функцию
zlib.NewReader,
которая создает читатель для zlib-сжатых данных