atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
しんのすけWiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
しんのすけWiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
しんのすけWiki
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • しんのすけWiki
  • ZLIBフォーマット

しんのすけWiki

ZLIBフォーマット

最終更新:2007年09月05日 14:30

shinsa

- view
管理者のみ編集可

ZLIB

データ圧縮フォーマット. ZLIB 3.3がRFC1950として公開. 最新バージョンが何かは知らない.
WikipediaによるとUNIX系OSでcompressが使えなくなったことへの対応として, gzipで使用されるフォーマットとして採用された. 本来zlibという名前にあるとおり, ライブラリの名前である.
RFCの日本語訳を発見. こちら

Javaライブラリ

  • JDK1.1以降には組み込みのライブラリが存在する. (java.util.zip)
  • 上記は機能が制限されているとしてフル機能を実装している人もいる. (JZlib 1.0.7: こちら)

アルゴリズム/実装面から見た特徴

  • 実際の圧縮アルゴリズムとしてはDeflate圧縮を使っている (他の圧縮方法にも容易に対応できると書いてある. 意味するところはZLIBは単なる圧縮フォーマットに何らかのメタデータを加えた, より上位のフォーマットで, その中で圧縮に用いるアルゴリズムを指定できるということだろう)
    • LZ77とシャノン符号を用いている
    • 入力長は無制限
    • ワーキングメモリは事前に決めた固定長で動作する
  • チェックサムとしてAdler-32も使用する
  • 圧縮データへのランダムアクセスを提供しない

その他の特徴

  • 特許に抵触しない (これは結構大事)

仕様


記法など

  • バイト内のビットは下から順にビット0,1,…,7と数える
  • 複数バイトの数値を表現するときは上位バイトが先頭 (アドレスの低いほう, 配列の前のほう) に来る. 例えば2バイト (16ビット) の数520は [0x02, 0x08] の順で格納される.
  • バイトやバイト列には大文字のシンボルが割り当てられている. ビットまたはビット列にもシンボルが割り当てられる. バイト内のビットまたはビット列を表現するにはドット記法を用いる. 例: FLG.FDICT

データフォーマット

  • 1バイト: CMF (Compression Method and flags)
    • ビット0~3: CM (Compression method)
      • 圧縮アルゴリズムを表す
      • CM=8: windowサイズが32K以下のdeflateアルゴリズム (gzipやPNGで使用)
      • CM=15: 予約
    • ビット4~7: CINFO (Compression info)
      • CMの値に依存
      • CM=8の場合, LZ77のwindowサイズ (バイト単位) の対数をとって8を引いたもの (サイズが32Kの場合CINFO=7. つまり128bytesから2倍になるごとに1増える). この仕様では7より大きいCINFOは認められない
      • CM=8以外の場合, この仕様ではCINFOの値は定義されない
  • 1バイト: FLG (FLaGs)
    • ビット0~4: FCHECK (Check bits for CMF and FLG)
      • チェックサム: CMF*256+FLGが31の倍数になるようにこれをセットする
    • ビット5: FDICT (Preset dictionary)
      • 1ならDEFLATEのプリセット辞書が存在する (辞書とは圧縮器に与えられる初期入力バイト列. 出力は生成しない). DICTID参照のこと
    • ビット6~7: FLEVEL (Compression level)
      • 圧縮レベルを表す
      • CM=8の場合, 0=最も速いアルゴリズム, 1=速いアルゴリズム, 2=デフォルトのアルゴリズム, 3=圧縮率最大で最も遅いアルゴリズム
  • 4バイト: DICTID (FLG.FDICTが1なら)
    • 圧縮器に与えられる辞書のAdler-32チェックサムの値がここに入る
  • xバイト: 圧縮されたデータ
  • 4バイト: ADLER32
    • 辞書データを除く, 元データのAdler-32チェックサム. Alder-32の計算方法は以下の通り. 変数s1が全てのバイトの和を保持, 変数s2はすべてのs1値の和を保持する (つまりs2は, 1バイト読むごとに更新されるs1の値を足していく?). どちらの和も65521を法として計算する. 初期値はそれぞれ1, 0とする. Alder-32チェックサムはs2*65536+s1で計算される. バイトオーダーを考慮するとこれはs2, s1の順でデータを配置すればよい. アルゴリズムのコーディング例はRFCに載っている.
  • この後ろは無視される (そもそもどこからチェックサムかわかるのか?)

実装

ビルトインライブラリがあるが, あえて実装してみた. アーカイブフォーマットではないのでテストがしにくいが, Deflaterで作ったデータを読んでみれば良いだろうか.

実験結果

  • DeflaterOutputStreamクラスで作成したデータを読んでみた. FLEVELは2 (デフォルト) になる.
  • 次にDeflaterクラスを用いてオプションを設定してみる.


「ZLIBフォーマット」をウィキ内検索
LINE
シェア
Tweet
しんのすけWiki
記事メニュー
トップページ

カテゴリ一覧
  • 読書、勉強
    • デザインパターン マルチスレッド編
    • 情報科学における論理
  • ゲーム
    • 信じられない植物
    • ほのぼのニュータウン
  • 三角点
    • 一等三角点百名山
  • 百選
    • 日本さくら名所100選
    • 日本百名瀑
    • 日本の道百選
  • 登山
    • 日本百名山
    • 一等三角点百名山
    • 温泉
  • プログラミング
    • データ圧縮、アーカイブ
    • Googleサジェスト
    • The Dojo Toolkit
  • 車
  • 道
  • リンク


  • その他
    • 練習

記事メニュー2

更新履歴

取得中です。
最近更新されたページ
  • 5710日前

    ほのぼのニュータウン-上級職
  • 6050日前

    codes
  • 6319日前

    外秩父七峰縦走ハイキング大会
  • 6321日前

    登山
  • 6321日前

    メニュー
  • 6334日前

    百選
  • 6542日前

    ZLIBフォーマット
  • 6545日前

    データ圧縮、アーカイブ
  • 6547日前

    プログラミング
  • 6568日前

    疏水百選
もっと見る
最近更新されたページ
  • 5710日前

    ほのぼのニュータウン-上級職
  • 6050日前

    codes
  • 6319日前

    外秩父七峰縦走ハイキング大会
  • 6321日前

    登山
  • 6321日前

    メニュー
  • 6334日前

    百選
  • 6542日前

    ZLIBフォーマット
  • 6545日前

    データ圧縮、アーカイブ
  • 6547日前

    プログラミング
  • 6568日前

    疏水百選
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. ソードランページ @ 非公式wiki
  6. ヒカマーWiki
  7. AviUtl2のWiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. Dark War Survival攻略
  10. 2025.3.15 小田急線運用表
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. 初音ミク Wiki
  6. 検索してはいけない言葉 @ ウィキ
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 発車メロディーwiki
  9. 英傑大戦wiki
  10. モンスター烈伝オレカバトル2@wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  3. べりはぴ - ストグラ まとめ @ウィキ
  4. おくら - クッキー☆解説Wiki
  5. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  6. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  7. 危険度7 - 検索してはいけない言葉 @ ウィキ
  8. 868 - ストグラ まとめ @ウィキ
  9. ガンダム・エアリアル(改修型) - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  10. ミッション攻略 - 地球防衛軍6 @ ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.