SlideShare ist ein Scribd-Unternehmen logo
1 von 13
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で使われていて昔
特許で騒がれたアレ
実装されている圧縮アルゴリズム
圧縮アルゴリズムは共通で、ファイル形式のみ異なる
アルゴリズムについて詳しくは…
• 高速文字列解析の世界を読みましょう!
• http://www.amazon.co.jp/dp/4000069748
compress/*の使い方
• 基本的な使い方はどれも同じ
– 圧縮ファイルを扱う際は…
• NewReaderで圧縮ファイル読み込み用Reader作成
– 物によっては辞書や圧縮オプションを指定可能(ただし圧
縮時に利用した物を指定しないとerror)
• NewWriterで圧縮ファイル作成用Writer作成
– ものによって辞書(LZ77方式で利用する初期文脈?)と圧縮
オプションを指定可能
– Bzip2は伸張のみサポート
– 微妙にIFが異なる
• Exampleがあるzlibから紹介
• http://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を呼んでいる
解凍時の処理
• http://golang.org/pkg/compress/zlib/#example_NewReader
圧縮時の処理
• http://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

Weitere ähnliche Inhalte

Was ist angesagt?

Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
xibbar
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
Redisととあるシステム
Takehiro Torigaki
 
Hadoop HDFS: The Ultimate Storage
Hadoop HDFS: The Ultimate StorageHadoop HDFS: The Ultimate Storage
Hadoop HDFS: The Ultimate Storage
SATOSHI TAGOMORI
 
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
Tsukasa Oi
 
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
 

Was ist angesagt? (20)

5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた
 
高速化のポイント
高速化のポイント高速化のポイント
高速化のポイント
 
Github勉強会
Github勉強会Github勉強会
Github勉強会
 
サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)サーバーを作ろう (毎週のハンズオン勉強会の資料)
サーバーを作ろう (毎週のハンズオン勉強会の資料)
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
Git svnではじめる忍者のごとく潜むgit
Git svnではじめる忍者のごとく潜むgitGit svnではじめる忍者のごとく潜むgit
Git svnではじめる忍者のごとく潜むgit
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
Redisととあるシステム
 
Rubyでバルクインサート
RubyでバルクインサートRubyでバルクインサート
Rubyでバルクインサート
 
Pd Kai#3 Startup Process
Pd Kai#3 Startup ProcessPd Kai#3 Startup Process
Pd Kai#3 Startup Process
 
Ruby with AWS DynamoDB
Ruby with AWS DynamoDBRuby with AWS DynamoDB
Ruby with AWS DynamoDB
 
Sphinx/reST
Sphinx/reSTSphinx/reST
Sphinx/reST
 
Hadoop HDFS: The Ultimate Storage
Hadoop HDFS: The Ultimate StorageHadoop HDFS: The Ultimate Storage
Hadoop HDFS: The Ultimate Storage
 
Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」
 
Redis速習会@Wantedly
Redis速習会@WantedlyRedis速習会@Wantedly
Redis速習会@Wantedly
 
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
 
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
 
最近のRust関連の活動
最近のRust関連の活動最近のRust関連の活動
最近のRust関連の活動
 
続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシン
 

Gunosy.go#2 package/compress

  • 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で使われていて昔 特許で騒がれたアレ 実装されている圧縮アルゴリズム 圧縮アルゴリズムは共通で、ファイル形式のみ異なる
  • 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を呼んでいる
  • 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