Функция bzip2.NewReader

Функция bzip2.NewReader создает новый io.Reader, который позволяет читать данные, сжатые в формате bzip2. В качестве единственного параметра она принимает исходный io.Reader с данными в формате bzip2 и возвращает объект для чтения распакованных данных. При возникновении ошибки во время создания возвращается ошибка.

Синтаксис

gobzip2.NewReader(r io.Reader) (io.Reader, error)

Пример

Давайте прочитаем содержимое файла, сжатого в формате bzip2:

gopackage 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, err := bzip2.NewReader(file)
  if err != nil {
    fmt.Println("Error creating bzip2 reader:", err)
    return
  }

  buf := make([]byte, 1024)
  for {
    n, err := reader.Read(buf)
    if n > 0 {
      fmt.Print(string(buf[:n]))
    }
    if err != nil {
      break
    }
  }
}

Результат выполнения кода (содержимое распакованного файла):

go"Hello, bzip2 world!"

Пример

Давайте прочитаем данные из строки, сжатой в bzip2:

gopackage main

import (
  "bytes"
  "compress/bzip2"
  "fmt"
  "io"
)

func main() {
  // Сжатые данные (пример)
  compressedData := []byte{
    0x42, 0x5a, 0x68, 0x31, 0x41, 0x59, 0x26, 0x53,
    0x59, 0x0d, 0x65, 0x50, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
  }

  reader := bzip2.NewReader(bytes.NewReader(compressedData))

  decompressed, err := io.ReadAll(reader)
  if err != nil {
    fmt.Println("Error decompressing:", err)
    return
  }

  fmt.Println(string(decompressed))
}

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

go"bzip2 data"

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

  • функцию compress/bzip2,
    пакет для работы с форматом bzip2
  • функцию gzip.NewReader,
    которая создает ридер для формата gzip
  • функцию zlib.NewReader,
    которая создает ридер для формата zlib
  • функцию flate.NewReader,
    которая создает ридер для формата flate