2011-02-02 30 views
29

文字列膨張アルゴリズムのJavaScript実装を探しています。 私はサーバー側(Java)で圧縮し、クライアント側で解凍します(JavaScript)。JavaScript:圧縮解除/拡張/解凍/解凍文字列

私が見つけた:

unzip strings in javascript
異なる問題の答えを答えとして1がマークされていること。他の答えは、他のもの(ZIP形式のファイルを解凍する)のためのものです。

JavaScript inflate implementation (possibly FF 3.6 only)
これは私が必要とするものに最も近いものです。しかし、私はいくつかの選択肢を持っていたいと思います。

提案?
おかげで、Ondra

アップデート:私は非常に特定のユースケースを持って 、お答えしないでください「JavaScriptでいることをしないでください。」 私は "オフライン"のレポートツールを作成しています(一度生成すると、静的ストアに保存されます)。そして、収縮すると、1つのレポートのメガバイトが節約されます。私は他のアプリに拘束されているので、zipファイルとして保存することはできません。

+3

主な問題は、JavaScriptに未加工データを操作する機能がないことです。すべての数値は浮動小数点であり、すべての文字列値はUTF-16(2バイト文字)として保持されます。 「バイト配列」のデータ型はありません。そのため、圧縮/解凍の実装ははるかに難しく、効率も大幅に低下します。 – Pointy

+4

[Typed Array Specification](http://www.khronos.org/registry/typedarray/specs/latest/)に基づいて、最近のJavaScript実装ではバイナリデータがサポートされています。 –

+0

はい、それは本当です - それは確かに役に立つでしょう:-) – Pointy

答えて

9

this Stack Overflow questionを見てください。その答えには、javascriptで実装された複数の圧縮エンジンへの参照が含まれています。これらのほとんどはLZ77に基づいています。私はあなたがそれをみたいのか分からないが、私はこれらの実装を好き

-4

JavaScriptでこれをしないでください。 JSはバイナリデータではうまく機能しません。

サーバー側でgzip転送エンコーディングを使用するだけで、ブラウザがそれを解凍します。

+11

私はそれが良いか悪いかを尋ねていません。私は実装を探しています。 -1。 –

+4

これはとても良いアドバイスです。専門知識を持つ多くの人が「悪いアイデア」と考えていることをしたい場合は、理由を説明する必要があります。 – Pointy

+3

@Pointy:私は同意しません。もちろん、あなたは正しいですが、誰かが何か非正統的なことを求めているのであれば、専門知識にかかわらず、揺らめいた指を振るのはおそらく最善のことではありません。 – jAndy

9

最初は、第二よりも最速で、我々は通常、しかし、我々はのパフォーマンスを知らない、高速なサーバーを確保することができますクライアントマシン。したがって、あなたはjs-deflateを選択して、Java(サーバー側)を調整して膨らませることをお勧めします。

https://github.com/dankogai/js-deflate

http://code.google.com/p/gzipjs/

+3

2番目のURL(gzipjs)にはどこにでも投稿されたコードはありません...または何か不足していますか? –

+1

これは受け入れられた答えであるはずです。 – almosnow

+0

私は何時間も前から検索していましたが、初めてこの回答をスキップしましたが、本当にシンプルで優れたソリューションです。私はLZMAに対してベンチマークしていますが、これは10倍高速で、同等の圧縮率で登場しています! –

2

この例:http://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip は、JavaScriptでZIPファイルを行うことができます方法を示しています。 ZIPではなく、ZLIBまたはDEFLATE圧縮が必要なことはわかっています。しかし、ZIPはDEFLATEを使用しています。その例の.jsファイル内には、読み込み時にINFLATEできるInflatingReaderクラスがあります。

クラスには、これらのメソッドを公開しています

readByte() 
    returns null when EOF is reached, or the value of the byte when successful. 

readToEnd() 
    returns an array of all bytes read, to EOF 

beginReadToEnd(callback) 
    async version of the above 

readBytes(n) 
    returns an array of n bytes read from the source. 

beginReadBytes(n, callback) 
    async version of the above 

あなたがINFLATEをしたい場合は、そのままそのコードを使用することができます。

ZLIB(別名unzip)が必要な場合は、2バイトの署名があり、圧縮されたバイトを読み取ってINFLATEを実行する前に読み込み、検証する必要があります。 InflatingReaderを読み込んで2バイトをダンプするように変更するだけで、ZLIBは正常に動作します。

+0

最初のリンクはもうオンラインではありません。 – heinob

+0

はい、申し訳ありませんが、私は知っています。私は新しい場所にそれを得ることに取り組んでいます。 – Cheeso

2

私は作業がここでの実装を膨らまが見つかりました:

http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt

あなたは、アルゴリズムを名前空間少しクリーナーバージョンをしたい場合は、この1つが動作するはずです:

https://github.com/augustl/js-inflate

を覚えておいてくださいgzippedの "inflate"データの先頭には2バイトのヘッダーが付いており、4バイトのチェックサムが付いています。このチェックサムはアルゴリズムに渡す前に削除する必要があります。

3

このグラフィックライブラリには、JavaScriptのzlib実装が含まれています。このページを少しスクロールすると、別のダウンロードとして表示されます。 http://jsxgraph.uni-bayreuth.de/wp/download/

関連する問題