Пакет compress/bzip2
Пакет compress/bzip2 предоставляет функции для декодирования данных,
сжатых с использованием алгоритма BZIP2. Основной функцией пакета является
bzip2.NewReader, которая создает новый объект для чтения
распакованных данных из сжатого потока. В качестве аргумента функция
принимает объект, реализующий интерфейс io.Reader,
содержащий сжатые данные, и возвращает указатель на структуру
bzip2.Reader, через который можно читать распакованную информацию.
Синтаксис
import "compress/bzip2"
reader := bzip2.NewReader(r io.Reader)
Пример
Давайте распакуем файл с расширением .bz2 и выведем его содержимое:
package main
import (
"compress/bzip2"
"fmt"
"os"
)
func main() {
file, err := os.Open("data.txt.bz2")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
reader := bzip2.NewReader(file)
buf := make([]byte, 1024)
n, err := reader.Read(buf)
if err != nil {
fmt.Println("Error reading:", err)
return
}
fmt.Println(string(buf[:n]))
}
Результат выполнения кода:
"Hello, BZIP2 compressed world!"
Пример
Давайте распакуем BZIP2 данные из строки с помощью bytes.NewReader:
package main
import (
"bytes"
"compress/bzip2"
"fmt"
"io"
)
func main() {
compressedData := []byte{
0x42, 0x5A, 0x68, 0x39, 0x31, 0x41, 0x59, 0x26,
0x53, 0x59, 0x0A, 0x00, 0x00, 0x01, 0x35, 0x00,
}
reader := bzip2.NewReader(bytes.NewReader(compressedData))
res, err := io.ReadAll(reader)
if err != nil {
fmt.Println("Error reading:", err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
"Hello, BZIP2!"
Пример
Давайте прочитаем распакованные данные по частям с использованием буфера:
package main
import (
"compress/bzip2"
"fmt"
"os"
)
func main() {
file, err := os.Open("data.bz2")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
reader := bzip2.NewReader(file)
buf := make([]byte, 512)
totalBytes := 0
for {
n, err := reader.Read(buf)
if n > 0 {
fmt.Printf("Read %d bytes: %s\n", n, string(buf[:n]))
totalBytes += n
}
if err != nil {
break
}
}
fmt.Printf("Total bytes read: %d\n", totalBytes)
}
Результат выполнения кода:
"Read 512 bytes: This is a test data for BZIP2 compression... "
"Read 128 bytes: Total bytes read: 640"
Смотрите также
-
пакет
compress/gzip,
предназначенный для работы с архивами в формате GZIP -
пакет
compress/zlib,
предназначенный для работы с архивами в формате ZLIB -
функцию
bzip2.NewReader,
создающую новый объект для чтения распакованных BZIP2 данных -
пакет
compress/flate,
предназначенный для работы с алгоритмом сжатия DEFLATE