SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Gunosy.go#2 package/compress
Report
Shunsuke Aihara
Follow
Jun. 18, 2014
•
0 likes
•
1,474 views
1
of
13
Gunosy.go#2 package/compress
Jun. 18, 2014
•
0 likes
•
1,474 views
Download Now
Download to read offline
Report
Software
Shunsuke Aihara
Follow
Recommended
Bossan dentoo
kubo39
1.2K views
•
24 slides
Aizu lt tokyo_luxion
Tomoaki Tamura
602 views
•
25 slides
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
azumakuniyuki 🐈
1.9K views
•
16 slides
Rustのタスクモデルについて
zigen
1.9K views
•
49 slides
CouchDB JP & BigCouch
Yohei Sasaki
1.8K views
•
40 slides
Linuxにおけるコマンドとエディタの使用方法の紹介
ADVENTURE Project
209 views
•
23 slides
More Related Content
What's hot
5社のGTFSをマージして、PostgreSQLにインポートしてみた
Masaki Ito
3.2K views
•
13 slides
高速化のポイント
ryos36
458 views
•
23 slides
Github勉強会
From Atom
6.5K views
•
45 slides
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
8.2K views
•
22 slides
NanoStrand
Masashi Umezawa
816 views
•
26 slides
Git svnではじめる忍者のごとく潜むgit
Kazuki Sato
13.7K views
•
35 slides
What's hot
(20)
5社のGTFSをマージして、PostgreSQLにインポートしてみた
Masaki Ito
•
3.2K views
高速化のポイント
ryos36
•
458 views
Github勉強会
From Atom
•
6.5K views
サーバーを作ろう (毎週のハンズオン勉強会の資料)
ひとし あまの
•
8.2K views
NanoStrand
Masashi Umezawa
•
816 views
Git svnではじめる忍者のごとく潜むgit
Kazuki Sato
•
13.7K views
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
•
15K views
Ruby&Active Support for expert 3
xibbar
•
795 views
Redisととあるシステム
Takehiro Torigaki
•
9K views
Rubyでバルクインサート
Fujimura Munehiko
•
2.1K views
Pd Kai#3 Startup Process
nagachika t
•
943 views
Ruby with AWS DynamoDB
Yuto Ogi
•
856 views
Sphinx/reST
Ryo Maruyama
•
2K views
Hadoop HDFS: The Ultimate Storage
SATOSHI TAGOMORI
•
2.9K views
Ebisu.rb#15LT「turnipいいよturnip」
Tsutomu Chikuba
•
1.5K views
Redis速習会@Wantedly
Yoshinori Kawasaki
•
4.8K views
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
Tsukasa Oi
•
4.5K views
高度に最適化された移植可能なメモリマネージャ
DADA246
•
8K views
最近のRust関連の活動
Hattori Hideo
•
108 views
続・SECDマシン
t-sin
•
419 views
Recently uploaded
HelloCraft.pdf
MedicalTalk
40 views
•
8 slides
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
30 views
•
59 slides
ハイエンド〜ローエンドまで、「Enlighten」による効率的リアルタイムグローバルイルミネーション|CEDEC2023
Silicon Studio Corporation
42 views
•
48 slides
DockerでCoq インストール
Yoshihiro Mizoguchi
17 views
•
8 slides
【JSTQB_ALTM】シラバス第3章
ssusercd6d02
39 views
•
27 slides
LTは検証の場.pptx
ssuserfcafd1
290 views
•
10 slides
Recently uploaded
(7)
HelloCraft.pdf
MedicalTalk
•
40 views
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
•
30 views
ハイエンド〜ローエンドまで、「Enlighten」による効率的リアルタイムグローバルイルミネーション|CEDEC2023
Silicon Studio Corporation
•
42 views
DockerでCoq インストール
Yoshihiro Mizoguchi
•
17 views
【JSTQB_ALTM】シラバス第3章
ssusercd6d02
•
39 views
LTは検証の場.pptx
ssuserfcafd1
•
290 views
Ansible入門.pptx
洵貴 佐川
•
220 views
Gunosy.go#2 package/compress
1.
Gunosy.go#2 package/compress Shunsuke Aihara
2.
compress is ... •
http://golang.org/pkg/compress/ • いわゆる圧縮ファイルを扱うもの – なんか見てみたらGoで全部書いてある – libzlibとかに依存せずgoで完結してる • 複数の圧縮ファイルフォーマットに対応 – bzip2 – zlib – gzip – lzw
3.
実装されている圧縮アルゴリズム • bzip2 – Bw変換を用いた圧縮アルゴリズム。 –
遅いが圧縮率が高い • flate(bzip, zlib) – zipで用いられている圧縮アルゴリズム(Deflate) – LZ77 + ハフマン符号 • lzw – deflateと比べると高速だが圧縮効率が若干悪い – LZ78の改良アルゴリズム。gifで使われていて昔 特許で騒がれたアレ
4.
• bzip2 – Bw変換を用いた圧縮アルゴリズム。 –
遅いが圧縮率が高い • flate(bzip, zlib) – zipで用いられている圧縮アルゴリズム(Deflate) – LZ77 + ハフマン符号 • lzw – deflateと比べると高速だが圧縮効率が若干悪い – LZ78の改良アルゴリズム。gifで使われていて昔 特許で騒がれたアレ 実装されている圧縮アルゴリズム 圧縮アルゴリズムは共通で、ファイル形式のみ異なる
5.
アルゴリズムについて詳しくは… • 高速文字列解析の世界を読みましょう! • http://www.amazon.co.jp/dp/4000069748
6.
compress/*の使い方 • 基本的な使い方はどれも同じ – 圧縮ファイルを扱う際は… •
NewReaderで圧縮ファイル読み込み用Reader作成 – 物によっては辞書や圧縮オプションを指定可能(ただし圧 縮時に利用した物を指定しないとerror) • NewWriterで圧縮ファイル作成用Writer作成 – ものによって辞書(LZ77方式で利用する初期文脈?)と圧縮 オプションを指定可能 – Bzip2は伸張のみサポート – 微妙にIFが異なる • Exampleがあるzlibから紹介 • http://play.golang.org/p/GH6_Mtoaek
7.
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を呼んでいる
8.
解凍時の処理 • http://golang.org/pkg/compress/zlib/#example_NewReader
9.
圧縮時の処理 • http://golang.org/pkg/compress/zlib/#example_NewWriter
10.
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) • その他、圧縮オプションに関する定数値、エラー型を定義
11.
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を呼んでいる
12.
compress/bzip2 • func NewReader(r
io.Reader) io.Reader • type StructuralError – func (s StructuralError) Error() string • Block sort(BW変換)のgo実装読んでみた かったけど圧縮は未対応だった
13.
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