问题标签 [pako]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
371 浏览

javascript - 从 Uint8Array 到 UTF-16 字符串的转换冻结/崩溃浏览器

我从服务器获取某种编码数据,应该正确解码并在客户端显示为字符串(UTF-16)。此刻我正在做这样的事情:

在大多数情况下,它工作正常。但有时客户端必须处理大量数据,因此它会冻结(Google Chrome 51.0.2704.84)甚至崩溃(Chromium 50.0.2661.102)浏览器选项卡。所以我发现,问题是 pako 的 inflate 方法中的 { to: 'string' } 选项,同时尝试将包含大约 50kk 个元素的 Uint8Array 转换为 UTF-16 字符串。

我试图以这样的方式手动转换它:

但它会产生:Uncaught RangeError: Maximum call stack size exceeded

所以现在我正在寻找解决方案,让事情变得更快,或者至少防止浏览器崩溃。有任何想法吗?

UPD:尝试String.fromCharCode.apply使用块来防止异常。所以异常的问题得到了解决,但它的工作速度比第一个解决方案慢两倍。

UPD:所以问题是如何将大量 Uint8Array 转换为 UTF-16 字符串以防止浏览器冻结。

0 投票
1 回答
1283 浏览

node.js - node.js ws permessagedeflate zlib 解压和pako的区别?

我有一个接收压缩数据的 node.js ws websocket。

文档中关于膨胀机制的内容非常浅薄,但通过阅读源文件,它显然是内置的,应该根据接收到的数据类型自动激活。

但是,当附加ws.on('message',function(data){})事件时,它会返回一个< Buffer >

因为我知道这些流之前已经用 Pako 进行了膨胀,所以我尝试安装它,它实际上使用以下代码工作:

据我了解,这两个模块都使用 zlib 解压缩,但 ws 模块不知何故错过了它。

有人可以给出合理的解释或至少假设为什么吗?

0 投票
0 回答
1146 浏览

javascript - 如何正确发送和接收放气数据

我正在使用 protobufs 来序列化我的数据。到目前为止,我在服务器上序列化了我的数据(节点 restify)发送它,接收它(请求由 XMLHttpRequest 发出)并在客户端上序列化它。

现在我想使用压缩来减少传输的文件大小。我尝试使用使用 zlib 的库pako

在我用来比较 protobuf 和 zipping 性能与 json 的基本脚本中,我以这种方式使用它,没有问题

但是,如果我尝试在客户端-服务器模型中执行此操作,我将无法使其正常工作。

服务器:

我自己的proto库将 protobuf 中的数据序列化,然后将其放气:

请求如下所示:

proto.decode 方法首先膨胀缓冲区buffer = pako.inflate(buffer);,然后从 Protobuf 反序列化它。

如果发出请求,我会收到以下错误:pako 的 inflate 方法返回“未捕获的错误标头检查” :

我还查看了 Postman 中的请求,发现以下内容:放气的响应如下所示:120,156,60,221,119,64,21,237,119,39,240,247,246,242,10,49,191,244,178,73,54,157并且长度为 378564

没有放气的相同请求(protobuf)看起来像这样 �:�: (� 0�8@H (� 0�8@H � (�0�8@�H,长度为 272613。

我假设我在服务器端做错了什么,因为膨胀的请求比不使用压缩的请求大。它是内容类型的标题吗?我没主意了。

0 投票
4 回答
2369 浏览

javascript - 使用 php-gzdeflate 和 pako-js

我正在尝试结合php-gzdeflatepako。压缩我正在使用的字符串:

但我似乎无法使用 pako 读回这个字符串。我尝试了以下方法:

我收到此消息:未捕获的错误标头检查

有没有一种简单的方法可以使用 generic-php 进行压缩并使用 pako 进行膨胀?

到目前为止,我已经尝试添加从 1 到 9 的各种 gzdeflate “级别”,但它们似乎都没有任何区别。在这一点上,我只是在猜测。

如果可能的话,我们宁愿不安装任何特殊的 php 扩展

非常感谢您。

0 投票
2 回答
2127 浏览

javascript - 在 Python 中使用 Pako 放气

我正在尝试压缩字典以访问 API。
我阅读了某人使用 JavaScript 和一个名为“pako”的库压缩数据的代码,并亲自尝试过。它完美地工作:

现在我想对 Python 做同样的事情:我尝试了以下方法,但结果不同并且不起作用:

有没有人理想的如何用 Python 解决这个问题?是否有与 Python 的 pako 类似的库?

0 投票
1 回答
5043 浏览

javascript - 使用 Pako 提取 Javascript 中的 gzip 数据 - 编码问题

我正在尝试运行我期望的一个非常常见的用例:

我需要从 Amazon S3 下载一个 gzip 文件(包含复杂的 JSON 数据集),然后用 Javascript 解压缩(gunzip)它。除了最后的“充气”步骤外,我的一切工作正常。

我正在使用 Amazon Gateway,并确认网关正在正确传输压缩文件(使用 Curl 和 7-zip 来验证生成的数据是否来自 API)。不幸的是,当我尝试使用 Pako 对 Javascript 中的数据进行膨胀时,我遇到了错误。

这是我的代码(注意:response.data 是从 AWS 传输的二进制数据):

还尝试了一个版本,通过在 inflate 之前添加以下内容将二进制数据输入拆分为数组:

我怀疑我的数据编码存在某种问题,并且我没有将其转换为正确的格式,以使 Uint8Array 有意义。

谁能指出我正确的方向来完成这项工作?

为了清楚起见:

  • 正如上面列出的代码,我得到一个缓冲区错误。如果我删除 Uint8Array,并尝试处理“result.data”,我会收到错误:“不正确的标头检查”,这让我怀疑这是我的数据的编码/格式问题。
  • 原始文件在Java 中使用带有UTF-8 的GZIPOutputStream 进行压缩,然后存储为静态文件(即randomname.gz)。

  • 该文件作为二进制文件通过 AWS 网关传输,因此它与原始文件完全相同,因此 'curl --output filename.gz {URLtoS3Gateway}' === 从 S3 下载的文件。

  • 当我使用网关将二进制数据编码为“base64”时,我遇到了同样的基本问题,但并没有尝试很多,因为使用“真实”二进制数据似乎比添加 base64 更容易在中间进行编码/解码。如果这是需要的步骤,我可以将其重新添加。

我还尝试了在这个问题中途发现的一些示例处理:https ://github.com/nodeca/pako/issues/15 ,但这没有帮助(我可能误解了二进制格式 v.array v base64 )。

0 投票
1 回答
3416 浏览

javascript - Pako 无法压缩在 python 中生成的 gzip 文件

我正在使用以下代码从 python 生成 gzip 文件:(使用 python 3)

但是,我现在正在尝试使用 Pako 库在 Javascript 中读取此文件(我使用的是 Angular 2):

但我在控制台中收到此错误:unknown compression method. 我应该做其他事情来正确膨胀 gzip 文件吗?

0 投票
0 回答
90 浏览

javascript - 在javascript中解压缩超过2G的文件

我一直RawDeflate在我的 javascript 代码中使用来解压缩文件。最近发现有时候会静默失败,追查到原来文件超过2G的情况。我尝试切换到,pako但这也失败了(至少不是默默地)。有谁知道任何可以解压缩大于 2G 的文件的 JS 包?

这是我在浏览器控制台中得到的:

0 投票
0 回答
551 浏览

arrays - 解压节点js中的字节数组

我们目前在 android 有一个项目,公司想在服务器上做一些事情。使用 Node JS 的服务器端代码。我想做的事情看起来很简单,但我坚持下去。我们有一个压缩的长字节数组,在 android 项目中我有他的代码可以正常工作并解压缩字节数组。我想在 Node JS 中做同样的事情,但我得到了错误incorrect data check

这是我从文档中编写的代码,Pako但正如我所说,它返回错误。

输入是完全相同的字节数组。任何帮助,将不胜感激。

0 投票
1 回答
236 浏览

jquery - JQuery $.get 和膨胀数据

我收到了一个小型浏览器应用程序,它获取一个二进制文件,解压缩它,然后在浏览器中显示它的内容。

但是,我无法将数据正确转换为字节数组,随后由于“无效的代码长度设置”而导致膨胀失败。

这是我的获取方法:

这是膨胀文件的方法:

我做转换错了吗?我可以排除文件已损坏,正如您在注释掉的行中看到的那样,我正在测试上传文件并且它有效。