我正在寻找字符串膨胀算法的JavaScript实现。 我想在服务器端(Java)进行压缩,并在客户端进行解压缩(JavaScript)。
我找到了:
unzip strings in javascript
那个被标记为回答了不同问题的答案。其他答案也适用于其他问题(解压缩ZIP格式的文件)。
JavaScript inflate implementation (possibly FF 3.6 only)
这最接近我的需要。但是,我想有一些替代方案。
建议?
谢谢,Ondra
更新的 我有一个特定的用例,请不要回答“不要在JavaScript中这样做”。 我正在编写一个“离线”报告工具(一旦生成,它被放到一个静态存储中),并且放气可以为单个报告节省兆字节。我受其他应用程序的约束,因此我无法将其存储为zip文件。
答案 0 :(得分:10)
看看this Stack Overflow question,其中的答案包含对javascript中实现的多个压缩引擎的引用。其中大部分都是基于LZ77。
答案 1 :(得分:10)
我不知道你是怎么想的,但我喜欢这些实现:
第一个比第二个快,我们通常可以确保快速服务器,但是我们不知道客户机的性能。因此,我建议你选择js-deflate并调整你的java(服务器端)以充气。
答案 2 :(得分:5)
我使用pako
,现代和快速Zlib
端口创建了一个工作示例。
http://jsfiddle.net/9yH7M/2/
答案 3 :(得分:3)
这个图形库作为其中的一部分,是javascript中的zlib实现。如果您向下滚动此页面,您会将其视为单独下载。 http://jsxgraph.uni-bayreuth.de/wp/download/
答案 4 :(得分: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。
答案 5 :(得分:2)
我在这里找到了一个有效的inflate实现:
http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt
如果你想要一个稍微更清洁的版本来命名算法,那么这个应该可以工作:
https://github.com/augustl/js-inflate
请记住,gzip压缩的“inflate”数据前缀为双字节标头,后缀为四字节校验和,您需要在传递给算法之前将其去除。
答案 6 :(得分:-4)
不要在JavaScript中这样做。它很慢,而且JS不能很好地处理二进制数据。
只需在服务器端使用gzip传输编码,您的浏览器就会负责解压缩。