文字列を膨らませるアルゴリズムのJavaScript実装を探しています。サーバー側(Java)で圧縮し、クライアント側(JavaScript)で解凍したい。
私が見つけた:
javascriptで文字列を解凍
それは、別の問題に対する回答が回答済みとしてマークされています。他の答えも何か他のものです(Zip形式でファイルを解凍)。
JavaScript inflateの実装(おそらくFF 3.6のみ)
これは必要なものに最も近いものです。ただし、いくつかの選択肢があります。
提案?
ありがとう、オンドラ
更新:かなり具体的なユースケースがありますが、「JavaScriptでそれをしないでください」と答えないでください。 「オフライン」レポートツールを作成し(生成されると、静的ストアに格納されます)、1つのレポートでデフレートするとメガバイトが節約される場合があります。他のアプリに制約されているため、Zipファイルとして保存できません。
このStack Overflowの質問 を見てください。そこでの回答には、javascriptで実装された複数の圧縮エンジンへの参照が含まれています。これらのほとんどはLZ77に基づいています。
私はあなたがそれをどのように望んでいるかわかりませんが、私はこれらの実装が好きです:
1つ目は2つ目よりも高速です。通常、高速なサーバーを確保できますが、クライアントマシンのパフォーマンスはわかりません。したがって、js-deflateを選択し、Java(サーバー側)を調整して膨張させることをお勧めします。
pako
、最新の高速Zlib
ポートを使用して、実用的な例を作成しました。 http://jsfiddle.net/9yH7M/2/
javascriptのzlib実装の一部であるこのグラフ作成ライブラリがあります。このページを少し下にスクロールすると、別のダウンロードとして表示されます。 http://jsxgraph.uni-bayreuth.de/wp/download/
この例: 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)が必要な場合は、圧縮バイトを読み取ってINFLATEを実行する前に読み取りおよび検証する必要がある2バイトの署名があります。 。 InflatingReaderを変更して、2バイトの読み取りとダンプを行うだけで、ZLIBは問題なく動作します。
私はここで機能するインフレ実装を見つけました:
http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt
アルゴリズムの名前空間を指定するわずかにクリーンなバージョンが必要な場合、これは動作するはずです:
https://github.com/augustl/js-inflate
Gzipで圧縮された「インフレート」データには、2バイトのヘッダーが接頭辞として付けられ、4バイトのチェックサムが接尾辞として付けられるため、アルゴリズムに渡す前にストリップする必要があることに注意してください。