Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Gunosy.go#2 package/compress
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
shunsukeaihara
June 19, 2014
Technology
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gunosy.go#2 package/compress
shunsukeaihara
June 19, 2014
More Decks by shunsukeaihara
See All by shunsukeaihara
BONXを支える技術:発話区間検出(VAD)の話/Akerun & BONX Tech Talk
shunsukeaihara
4
7.8k
Goのnet.TCPConnの話/shibuya.go01
shunsukeaihara
3
890
Norikra in Gunosy Network Ads@Norikra meetup #2
shunsukeaihara
1
6.1k
LevelDB on S3 As A KVS
shunsukeaihara
1
3k
色恒常性仮説に基づく色補正ライブラリcolorcorrect / 2015-01-31-kantocv27
shunsukeaihara
3
2.6k
Sparkによる分散処理 / 2015-01-16 PyData.Tokyo#3
shunsukeaihara
11
3.6k
ゼロから始めた Gunosyアドサーバ開発運用記 / 2014-12-16-dots
shunsukeaihara
6
1.2k
Gunosy.Go#5 index/io/log
shunsukeaihara
0
200
Other Decks in Technology
See All in Technology
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
520
分析AIエージェントを育てる、動く環境を育てる
codatum
0
130
The seven pitfalls of AI (revised version)
ufried
0
280
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
150
IoTデバイスを繋げるプロトコルMatterをAndroidで使用する方法
harutiro
0
120
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
280
組み立てて楽しむ AWS Blocks 入門
kmiya84377
0
220
形式手法を使って仕様をコーディングしよう
mikanichinose
0
180
AI時代のAPI開発を加速する品質ガードレール / API Quality Guardrails in the AI Era
yokawasa
0
160
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
450
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
220
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
290
Featured
See All Featured
Making Projects Easy
brettharned
120
6.8k
How STYLIGHT went responsive
nonsquared
100
6.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
The SEO Collaboration Effect
kristinabergwall1
1
590
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
270
The untapped power of vector embeddings
frankvandijk
2
1.9k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
530
Deep Space Network (abreviated)
tonyrice
0
360
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
420
Transcript
Gunosy.go#2 package/compress Shunsuke Aihara
compress is ... • http://golang.org/pkg/compress/ • いわゆる圧縮ファイルを扱うもの – なんか⾒見見てみたらGoで全部書いてある –
libzlibとかに依存せずgoで完結してる • 複数の圧縮ファイルフォーマットに対応 – bzip2 – zlib – gzip – lzw
実装されている圧縮アルゴリズム • bzip2 – Bw変換を⽤用いた圧縮アルゴリズム。 – 遅いが圧縮率率率が⾼高い • flate(bzip, zlib)
– zipで⽤用いられている圧縮アルゴリズム(Deflate) – LZ77 + ハフマン符号 • lzw – deflateと⽐比べると⾼高速だが圧縮効率率率が若若⼲干悪い – LZ78の改良良アルゴリズム。gifで使われていて昔 特許で騒がれたアレ
• bzip2 – Bw変換を⽤用いた圧縮アルゴリズム。 – 遅いが圧縮率率率が⾼高い • flate(bzip, zlib) –
zipで⽤用いられている圧縮アルゴリズム(Deflate) – LZ77 + ハフマン符号 • lzw – deflateと⽐比べると⾼高速だが圧縮効率率率が若若⼲干悪い – LZ78の改良良アルゴリズム。gifで使われていて昔 特許で騒がれたアレ 実装されている圧縮アルゴリズム 圧縮アルゴリズムは共通で、ファイル形式のみ異異なる
アルゴリズムについて詳しくは… • ⾼高速⽂文字列列解析の世界を読みましょう! • h9p://www.amazon.co.jp/dp/4000069748
compress/*の使い⽅方 • 基本的な使い⽅方はどれも同じ – 圧縮ファイルを扱う際は… • NewReaderで圧縮ファイル読み込み⽤用Reader作成 –
物によっては辞書や圧縮オプションを指定可能(ただし圧 縮時に利利⽤用した物を指定しないとerror) • NewWriterで圧縮ファイル作成⽤用Writer作成 – ものによって辞書(LZ77⽅方式で利利⽤用する初期⽂文脈?)と圧縮 オプションを指定可能 – Bzip2は伸張のみサポート – 微妙にIFが異異なる • Exampleがあるzlibから紹介 • h9p://play.golang.org/p/GH6_Mtoaek
compress/zlib • func NewReader(r io.Reader) (io.ReadCloser, error) • func
NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error) • type Writer – func NewWriter(w io.Writer) *Writer – func NewWriterLevel(w io.Writer, level int) (*Writer, error) – func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error) – func (z *Writer) Close() error – func (z *Writer) Flush() error – func (z *Writer) Reset(w io.Writer) – func (z *Writer) Write(p []byte) (n int, err error) • その他、圧縮オプションに関する定数値、エラー型を定義 • 中でflateを呼んでいる
解凍時の処理理 • h9p://golang.org/pkg/compress/zlib/#example_NewReader
圧縮時の処理理 • h9p://golang.org/pkg/compress/zlib/#example_NewWriter
compress/flate • func NewReader(r io.Reader) io.ReadCloser • func NewReaderDict(r
io.Reader, dict []byte) io.ReadCloser • type CorruptInputError – func (e CorruptInputError) Error() string • type InternalError – func (e InternalError) Error() string • type ReadError – func (e *ReadError) Error() string • type Reader • type WriteError – func (e *WriteError) Error() string • type Writer – func NewWriter(w io.Writer, level int) (*Writer, error) – func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) – func (w *Writer) Close() error – func (w *Writer) Flush() error – func (w *Writer) Reset(dst io.Writer) – func (w *Writer) Write(data []byte) (n int, err error) • その他、圧縮オプションに関する定数値、エラー型を定義
compress/gzip • type Header • type Reader –
func NewReader(r io.Reader) (*Reader, error) – func (z *Reader) Close() error – func (z *Reader) Read(p []byte) (n int, err error) • type Writer – func NewWriter(w io.Writer) *Writer – func NewWriterLevel(w io.Writer, level int) (*Writer, error) – func (z *Writer) Close() error – func (z *Writer) Flush() error – func (z *Writer) Reset(w io.Writer) – func (z *Writer) Write(p []byte) (int, error) • その他、圧縮オプションに関する定数値、エラー型を定義 • gzipは独⾃自のヘッダ型がある • 中でflateを呼んでいる
compress/bzip2 • func NewReader(r io.Reader) io.Reader • type StructuralError
– func (s StructuralError) Error() string • Block sort(BW変換)のgo実装読んでみた かったけど圧縮は未対応だった
compress/lzw • func NewReader(r io.Reader, order Order, litWidth int)
io.ReadCloser • func NewWriter(w io.Writer, order Order, litWidth int) io.WriteCloser • type Order