Skip to content

Repository files navigation

zlib.js

Greenkeeper badge

Build Status

English version

zlib.js は ZLIB(RFC1950), DEFLATE(RFC1951), GZIP(RFC1952), PKZIP の JavaScript 実装です。

使い方

zlib.js は必要な機能ごとに分割されています。 bin ディレクトリから必要なものを利用してください。

  • zlib_and_gzip.min.js: ZLIB + GZIP
    • (Raw)
      • rawdeflate.js: Raw Deflate
      • raw.js: Raw Inflate
    • zlib.min.js: ZLIB Inflate + Deflate
      • inflate.min.js: ZLIB Inflate
      • deflate.min.js: ZLIB Deflate
      • inflate_stream.min.js: ZLIB Inflate (stream mode)
    • (GZIP)
      • gzip.min.js: GZIP
      • gunzip.min.js: GUNZIP
    • (PKZIP)
      • zip.min.js ZIP
      • unzip.min.js UNZIP
  • node-zlib.js: (ZLIB + GZIP for node.js)

圧縮 (Compress)

Raw Deflate

// plain = Array.<number> or Uint8Arrayvardeflate=newZlib.RawDeflate(plain);varcompressed=deflate.compress();

Raw Deflate Option

ZLIB Option を参照してください。

ZLIB

// plain = Array.<number> or Uint8Arrayvardeflate=newZlib.Deflate(plain);varcompressed=deflate.compress();
ZLIB Option

Zlib.Deflate の第二引数にオブジェクトを渡す事で圧縮オプションを指定する事が出来ます。

{compressionType: Zlib.Deflate.CompressionType,// 圧縮タイプlazy: number// lazy matching の閾値}

Zlib.Deflate.CompressionTypeNONE(無圧縮), FIXED(固定ハフマン符号), DYNAMIC(動的ハフマン符号) から選択する事ができます。 default は DYNAMIC です。

lazy は Lazy Matching の閾値を指定します。 Lazy Matching とは、LZSS のマッチ長が閾値より低かった場合、次の Byte から LZSS の最長一致を試み、マッチ長の長い方を選択する手法です。

GZIP

GZIP の実装は現在不完全ですが、ただの圧縮コンテナとして使用する場合には特に問題はありません。 zlib.js を用いて作成された GZIP の OS は、自動的に UNKNOWN に設定されます。

// plain = Array.<number> or Uint8Arrayvargzip=newZlib.Gzip(plain);varcompressed=gzip.compress();
GZIP Option
{deflateOptions: Object,// deflate option (ZLIB Option 参照)flags: {fname: boolean,// ファイル名を使用するかcomment: boolean,// コメントを使用するかfhcrc: boolean// FHCRC を使用するか},filename: string,// flags.fname が true のときに書き込むファイル名comment: string// flags.comment が true のときに書き込むコメント}

PKZIP

PKZIP では複数のファイルを扱うため、他のものとは少し使い方が異なります。

varzip=newZlib.Zip();// plainData1zip.addFile(plainData1,{filename: stringToByteArray('foo.txt')});zip.addFile(plainData2,{filename: stringToByteArray('bar.txt')});zip.addFile(plainData3,{filename: stringToByteArray('baz.txt')});varcompressed=zip.compress();functionstringToByteArray(str){vararray=new(window.Uint8Array!==void0 ? Uint8Array : Array)(str.length);vari;varil;for(i=0,il=str.length;i<il;++i){array[i]=str.charCodeAt(i)&0xff;}returnarray;}
PKZIP Option

filename, comment, extraField は Typed Array が使用可能な場合は必ず Uint8Array を使用してください。

{filename: (Array.<number>|Uint8Array),// ファイル名comment: (Array.<number>|Uint8Array),// コメントextraField: (Array.<number>|Uint8Array),// その他の領域compress: boolean,// addFile メソッドを呼んだときに圧縮するか (通常は compress メソッドの呼び出し時に圧縮)compressionMethod: Zlib.Zip.CompressionMethod,// STORE or DEFLATEos: Zlib.Zip.OperatingSystem,// MSDOS or UNIX or MACINTOSHdeflateOption: Object// see: ZLIB Option}

伸張 (Decompress)

圧縮されたデータの伸張は、基本的に各コンストラクタに圧縮されたデータを渡し、 それの decompress メソッドを呼ぶ事で伸張処理を開始する事が出来ます。

Raw Deflate

// compressed = Array.<number> or Uint8Arrayvarinflate=newZlib.RawInflate(compressed);varplain=inflate.decompress();

Raw Deflate Option

ZLIB Option を参照してください。

ZLIB

// compressed = Array.<number> or Uint8Arrayvarinflate=newZlib.Inflate(compressed);varplain=inflate.decompress();
ZLIB Option

Zlib.Inflate の第二引数にオブジェクトを渡す事で伸張オプションを指定する事ができます。

{'index': number,// 入力バッファの開始位置'bufferSize': number,// 出力バッファの初期サイズ'bufferType': Zlib.Inflate.BufferType,// バッファの管理方法'resize': boolean,// 出力バッファのリサイズ'verify': boolean// 伸張結果の検証を行うか}

Zlib.Inflate.BufferTypeADAPTIVE(default) か BLOCK を選択する事ができます。

  • ADAPTIVE はバッファを伸張後のサイズを予測して一気に拡張しますが、データによっては余分にメモリを使用しすぎる事があります。
  • BLOCK では BufferSize ずつ拡張していきますが、動作はあまり速くありません。

resize オプションは Typed Array 利用可能時 decompress メソッドで返却する値の ArrayBufferUint8Array の長さまで縮小させます。 default は false です。

verify オプションは Adler-32 Checksum の検証を行うかを指定します。 default は false です。

GZIP

// compressed = Array.<number> or Uint8Arrayvargunzip=newZlib.Gunzip(compressed);varplain=gunzip.decompress();

Gunzip のオプションは現在ありません。

PKZIP

PKZIP の構築と同様に複数ファイルを扱うため、他のものとは少し使い方が異なります。

// compressed = Array.<number> or Uint8Arrayvarunzip=newZlib.Unzip(compressed);varfilenames=unzip.getFilenames();varplain=unzip.decompress(filenames[0]);

Unzip のオプションは現在ありません。

Node.js

Node.js で使用する場合はユニットテストを参照してください。 https://github.com/imaya/zlib.js/blob/master/test/node-test.js

Debug

zlib.js では JavaScript ファイルを minify された形で提供していますが、開発中やデバッグ時に minify する前の状態が知りたい事があります。 そういった時のために SourceMaps ファイルや Pretty Print されたファイルも提供しています。

Source Map

Source Map を使いたい場合はファイル名に dev のついたバージョンを使います。 例えば Source Map を有効にした Inflate を使いたい場合は以下になります。

- inflate.min.js // リリースバージョン
- inflate.dev.min.js // 開発バージョン(これを使う)

Pretty Print

SourceMaps とは異なりますが、minify の変数名の短縮のみ避けられれば良いという場合には、 Closure Compiler で読みやすくしたファイルを利用することも可能です。 zlib.pretty.js というファイル名で全ての実装がはいっていますので、minify されたものをこのファイルに置き換えるだけで使用できます。

How to build

ビルドは Grunt と Closure Compiler を使用して行います。

必要な環境

  • Grunt
  • Python

ビルド

Grunt を使ってビルドを行います。

$ grunt [target]

ビルドターゲット

targetファイル名含まれる実装
depsdeps.js依存関係の解決
deflatedeflate.min.jsZLIB Deflate
inflateinflate.min.jsZLIB Inflate
inflate_streaminlfate_stream.min.jsZLIB Inlate (stream)
zlibzlib.min.jsZLIB Deflate + Inflate
gzipgzip.min.jsGZIP Compression
gunzipgunzip.min.jsGZIP Decompression
zlib_and_gzipzlib_and_gzip.min.jsZLIB + GZIP
nodenode-zlib.jsZLIB + GZIP for node.js
zipzip.min.jsPKZIP Compression
unzipunzip.min.jsPKZIP Decompression
all*default target

テスト

ブラウザでは Karma, Node.js では mocha を使ってテストを行います。

$ npm test

ブラウザのみのテスト

$ npm run test-karma

Node.js のみのテスト

$ npm run test-mocha

Issue

現在プリセット辞書を用いた圧縮形式には対応していません。 プリセット辞書は通常の圧縮では利用されないため、影響は少ないと思います。

ライセンス

Copyright © 2012 imaya. Licensed under the MIT License.

About

compact zlib, deflate, inflate, zip library in JavaScript

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages