33

我正在寻找字符串膨胀算法的 JavaScript 实现。我想在服务器端(Java)压缩,在客户端(JavaScript)解压。

我发现:

解压缩 javascript 中的字符串
那一个被标记为已回答不同问题的答案。其他答案也适用于其他内容(以 ZIP 格式解压缩文件)。

JavaScript 膨胀实现(可能仅限 FF 3.6)
这最接近我的需要。不过我想有一些选择。

建议?
谢谢, 翁德拉

更新: 我有一个非常具体的用例,请不要回答“不要在 JavaScript 中那样做”。我正在编写一个“离线”报告工具(一旦生成,它就会被放到静态存储中),放气可以为单个报告节省兆字节。我受到其他应用程序的限制,因此无法将其存储为 zip 文件。

4

7 回答 7

10

Take a look at this Stack Overflow question, the answers there contains references to multiple compressing engines implemented in javascript. Most of these are based on LZ77.

于 2011-02-02T18:38:51.253 回答
10

我不知道你会怎么想,但我喜欢这些实现:

The first is fastest than second, We can usually ensure a fast server, however we don't know the performance of the client machine. Therefore I recommend you choose js-deflate and adjust your java (server side) to inflate.

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

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

于 2011-02-02T18:48:27.097 回答
7

pako我使用现代和快速Zlib端口 创建了一个工作示例。http://jsfiddle.net/9yH7M/2/

于 2014-03-26T23:53:55.013 回答
3

有这个图形库作为它的一部分,一个在 javascript 中的 zlib 实现。如果您向下滚动此页面,您会看到它是一个单独的下载。 http://jsxgraph.uni-bayreuth.de/wp/download/

于 2011-09-26T14:33:24.253 回答
2

我在这里找到了一个有效的膨胀实现:

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

如果你想要一个稍微干净的版本来命名算法,这个应该可以工作:

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

请记住,压缩后的“膨胀”数据以两个字节的标头为前缀,并以一个四字节的校验和为后缀,您需要在传递给算法之前将其剥离。

于 2011-02-24T21:35:27.247 回答
2

这个例子:http ://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip 展示了如何在 Javascript 中创建 ZIP 文件。现在,我知道您想要 ZLIB 或 DEFLATE 压缩,而不是 ZIP。但是,ZIP 使用 DEFLATE,并且在该示例的 .js 文件中,有一个 InflatingReader 类可以在读取时进行 INFLATE。

该类公开了这些方法:

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(也称为解压缩),那么在读取压缩字节和执行 INFLATE 之前,您需要读取和验证一个 2 字节签名。只需修改 InflatingReader 以读取和转储 2 个字节,它就可以很好地执行 ZLIB。

于 2011-02-03T00:34:45.193 回答
-4

不要在 JavaScript 中这样做。它会很慢,而且 JS 对二进制数据表现不佳。

只需在服务器端使用 gzip 传输编码,您的浏览器就会负责解压缩它。

于 2011-02-02T13:33:05.993 回答