golang

golang brotli 브로틀리 압축

kimbs0301 2024. 10. 1. 10:24

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

 

 

main_test.go

package main

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

	"github.com/andybalholm/brotli"
)

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

	inFileReader := bufio.NewReader(inFile)

	compressionWriter := brotli.NewWriterLevel(outFile, brotli.BestCompression)

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

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

 

사이즈 1.5 MB 텍스트 파일 압축 용량
584KB BestSpeed
344KB DefaultCompression
312KB BestCompression

 

BestCompression 압축의 경우 압축 시간이 오래 걸린다.

 

'golang' 카테고리의 다른 글

golang brotli 브로틀리 압축 해제  (0) 2024.10.06
golang gzip 압축  (0) 2024.10.01
golang ToCamelCase ToPascalCase  (0) 2024.10.01
golang UTC 타임존 변경  (0) 2024.07.08
golang uuid  (0) 2024.07.08