【问题标题】:NodeJS Zlib support for LZW ("compress") algorithm?NodeJS Zlib 支持 LZW(“压缩”)算法吗?
【发布时间】:2019-10-16 21:30:42
【问题描述】:

我有一个 Node/ExpressJS 服务器,其客户端软件只能访问“压缩”(LZW) 算法进行解压缩。

据我所知,Node 12.X zlib library 支持 LZW。 npm 中似乎也没有任何模块可以快速、通用地处理大于几百字节的内容的 LZW。

有没有人知道一种在 Node 服务器上高效且理想地在本地使用 LZW 的方法? Zlib 中的某些内容与 LZW 兼容吗?我的用例是处理高达几十千字节的数据。

一切都在 Docker 中,所以我可以在主机上安装 ncompress 并使用 child_process 直接调用它,或者其他什么,但这似乎很复杂。

【问题讨论】:

  • 你检查过npm吗,我用1次搜索找到了很多
  • 我有,但它们的下载量都很小,通常只用于字符串或其他特定用例。
  • @DanStarns 看起来那个人正在做一堆非标准的事情。它可能在幕后使用 LZW,但它添加了一层与直接 LZW 实现不兼容的功能,因为它基本上是为了对 javascript 对象进行脱水/水化。
  • @DanStarns 证明客户端使用的压缩方法实际上是“deflate”,这很好,因为 Node 的 zlib 支持它。我会留下这个问题,因为如果有答案,答案可能对某人仍然有用!

标签: node.js compression zlib lzw


【解决方案1】:

您可以在没有任何外部库的情况下执行此操作。 这是两个 LZW 编码和解码函数。

函数 en(c) { var x = "charCodeAt", b, e = {}, f = c.split(""), d = [], a = f[0], g = 256;对于 (b = 1; b e[a + c] = g, g++, a = c); d.push(1 for (b = 0; b 返回 d.join(""); }

函数 de(b) { var a, e = {}, d = b.split(""), c = f = d[0], g = [ c], h = o = 256;对于 (b = 1; b a ? d[b] :e[a] ? e[a] :f + c,
g.push(a), c = a.charAt(0), e[o] = f + c, o++, f = a;返回 g.join(""); }

请注意:这些函数仅适用于字符串。 来源:https://gist.github.com/JavaScript-Packer/bbf68a4dc0e1fd102221

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多