Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Gunosy.go#2 package/compress
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shunsukeaihara
June 19, 2014
Technology
140
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
870
Norikra in Gunosy Network Ads@Norikra meetup #2
shunsukeaihara
1
6.1k
LevelDB on S3 As A KVS
shunsukeaihara
1
2.9k
色恒常性仮説に基づく色補正ライブラリ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
190
Other Decks in Technology
See All in Technology
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
0
150
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
200
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
160
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
170
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
140
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
550
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
1.3k
AIチャット検索改善の3週間
kworkdev
PRO
2
150
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
170
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
160
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
550
入門!AWS Blocks
ysuzuki
1
170
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Odyssey Design
rkendrick25
PRO
2
700
Paper Plane
katiecoart
PRO
1
51k
Design in an AI World
tapps
1
250
What's in a price? How to price your products and services
michaelherold
247
13k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
210
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
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