ZLIB解压缩 - 客户端

Raj*_*ina 14 javascript compression zlib

我作为" ZLIB "压缩输入流接收数据.

使用Javascript/Ajax/JQuery,我需要在客户端解压缩它.

有办法吗?请帮忙.

我已经在JAVA中使用了这个,如下所示,但需要在客户端执行此操作.

url = new URL(getCodeBase(), dataSrcfile); 
URLConnection urlConn = url.openConnection();
urlConn.setUseCaches(false); 
InputStream in = urlConn.getInputStream();
InflaterInputStream inflate = new InflaterInputStream(in);
InputStreamReader inputStreamReader = new InputStreamReader(inflate);
InputStreamReader inputStreamReader = new InputStreamReader(in);
BufferedReader bufReader = new BufferedReader(inputStreamReader);
// Read until no more '#'
int i = 0;
int nHidden = 0;
String line1;
do //------------------------Parsing Starts Here
{
    line1 = bufReader.readLine();
.............
...... so on
Run Code Online (Sandbox Code Playgroud)

Red*_*dro 17

Pako是一个完整而现代的Zlib港口.

这是一个非常简单的例子,你可以从那里开始工作.

获取pako.js,您可以像这样解压缩byteArray:

<html>
<head>
  <title>Gunzipping binary gzipped string</title>
  <script type="text/javascript" src="pako.js"></script>
  <script type="text/javascript">

    // Get datastream as Array, for example:
    var charData    = [31,139,8,0,0,0,0,0,0,3,5,193,219,13,0,16,16,4,192,86,214,151,102,52,33,110,35,66,108,226,60,218,55,147,164,238,24,173,19,143,241,18,85,27,58,203,57,46,29,25,198,34,163,193,247,106,179,134,15,50,167,173,148,48,0,0,0];

    // Turn number array into byte-array
    var binData     = new Uint8Array(charData);

    // Pako magic
    var data        = pako.inflate(binData);

    // Convert gunzipped byteArray back to ascii string:
    var strData     = String.fromCharCode.apply(null, new Uint16Array(data));

    // Output to console
    console.log(strData);

  </script>
</head>
<body>
    Open up the developer console.
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

运行示例:http://jsfiddle.net/9yH7M/

或者,您可以在发送之前对数组进行base64编码,因为在以JSON或XML格式发送时,Array会占用大量开销.同样解码:

// Get some base64 encoded binary data from the server. Imagine we got this:
var b64Data     = 'H4sIAAAAAAAAAwXB2w0AEBAEwFbWl2Y0IW4jQmziPNo3k6TuGK0Tj/ESVRs6yzkuHRnGIqPB92qzhg8yp62UMAAAAA==';

// Decode base64 (convert ascii to binary)
var strData     = atob(b64Data);

// Convert binary string to character-number array
var charData    = strData.split('').map(function(x){return x.charCodeAt(0);});

// Turn number array into byte-array
var binData     = new Uint8Array(charData);

// Pako magic
var data        = pako.inflate(binData);

// Convert gunzipped byteArray back to ascii string:
var strData     = String.fromCharCode.apply(null, new Uint16Array(data));

// Output to console
console.log(strData);
Run Code Online (Sandbox Code Playgroud)

运行示例:http://jsfiddle.net/9yH7M/1/

为了更高级,这里是pakoAPI文档.

  • 要从未压缩的数据中获取字符串,您还可以执行以下操作:`var strData = pako.inflate(binData,{to:'string'});`.请参阅此处的选项:http://nodeca.github.io/pako/#inflate (3认同)

use*_*908 11

最新的产品是https://github.com/imaya/zlib.js

我认为它比替代品好得多.

  • 单击标有[英文文档](https://github.com/imaya/zlib.js/blob/master/README.en.md)的链接即可获得英文文档. (11认同)
  • 我没有看到这是多么重要.如果您熟悉zlib,则API很清楚.该库设计精良,快速且易于使用. (8认同)

cg.*_*cg. 2

正如对您的问题的第一条评论所暗示的那样,我怀疑您实际上希望浏览器来处理解压缩。如果我弄错了,你可能想查看JSXGraph库,它应该包含deflate 和 unzip 的纯 JS 实现