golang

golang brotli 브로틀리 압축 해제

kimbs0301 2024. 10. 6. 15:19

brotli 모듈 저장소
github.com/andybalholm/brotli

 

main_test.go

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"testing"

	"github.com/andybalholm/brotli"
)

// TestDecompress
func TestDecompress(t *testing.T) {
	inFile, err := os.Open("C:/files/big-text-file.txt.br")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer inFile.Close()
	outFile, err := os.Create("C:/files/big-text-file")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer outFile.Close()

	inFileReader := brotli.NewReader(inFile)

	outFileWriter := bufio.NewWriterSize(outFile, 4096)

	buf := make([]byte, 4096, 4096)
	for {
		n, err := inFileReader.Read(buf)
		if err != nil {
			if err == io.EOF {
				fmt.Printf("ok n: %d\n", n)
			} else {
				fmt.Printf("inFileReader.Read() method execution error, error is: %v\n", err)
			}
			break
		}

		_, err = outFileWriter.Write(buf[:n])
		if err != nil {
			fmt.Printf("outFileWriter.Write() method execution error, error is: %v\n", err)
			break
		}
		if err := outFileWriter.Flush(); err != nil {
			fmt.Printf("outFileWriter.Flush() method execution error, error is: %v\n", err)
			break
		}
	}
}