😄

【Go】gzip圧縮がどのくらい圧縮してるのか確かめる

2023/07/11に公開

jsonplaceholderのデータをhello.txtにコピペして確かめる。
https://jsonplaceholder.typicode.com/

main.go
package main

import (
	"compress/gzip"
	"fmt"
	"io"
	"os"
)

func main() {
	compress()

	beforeFile, err := os.Open("hello.txt")
	if err != nil {
		panic(err)
	}
	bInfo, err := beforeFile.Stat()
	if err != nil {
		panic(err)
	}
	bSize := bInfo.Size()

	fmt.Printf("[before] %v byte\n", bSize)

	afterFile, err := os.Open("hello.txt.gz")
	if err != nil {
		panic(err)
	}
	aInfo, err := afterFile.Stat()
	if err != nil {
		panic(err)
	}
	aSize := aInfo.Size()

	fmt.Printf("[after]  %v byte\n", aSize)
}

func compress() {
	dist, err := os.Create("hello.txt.gz")
	if err != nil {
		panic(err)
	}
	defer dist.Close()

	gw, err := gzip.NewWriterLevel(dist, gzip.BestCompression)
	if err != nil {
		panic(err)
	}
	defer gw.Close()

	src, err := os.Open("hello.txt")
	if err != nil {
		panic(err)
	}
	defer src.Close()

	if _, err := io.Copy(gw, src); err != nil {
		panic(err)
	}
}

/posts

/posts

# 1件
[before] 284 byte
[after]  207 byte
# 100件
[before] 25520 byte
[after]   6941 byte

/comments

/comments

[before] 145745 byte
[after]   39615 byte

/albums

/albums

[before] 7733 byte
[after]  1949 byte

/photos

/photos

# 1件
[before] 195 byte
[after]  154 byte
# 5000件
[before] 951472 byte
[after]  127632 byte

/todos

/todos

[before] 20311 byte
[after]   3835 byte

/users

/users

[before] 4505 byte
[after]  1765 byte

参考

https://jsonplaceholder.typicode.com/
https://zenn.dev/kou_pg_0131/articles/go-gzip-compress-and-decompress

Discussion