支持二进制数据的javascript压缩算法

javascript compression algorithm that supports BINARY data?

本文关键字:javascript 压缩算法 数据 二进制 支持      更新时间:2023-09-26

我正在寻找一种javascript中的无损压缩算法(如LZW或Huffman或任何东西),它接受并返回原始二进制数据。

对于"二进制数据",我指的是字节序列,它可能有以下任何形式:

  • 包含0到255之间任意值的字符的字符串
  • 包含0到255之间任意值的整数的数组
  • 包含数据十六进制表示的字符串(即每个字节2个十六进制数字)
  • 包含数据的base64编码表示的字符串
  • 或者任何其他可以明确地从上述任何内容转换为上述任何内容的内容

现在很明显,对于各种各样的算法,到处都有大量的javascript实现。然而,我发现的一切似乎都在做疯狂的事情,比如:

  • 返回一个包含值>255的数组(那么现在的压缩比是多少?我如何用字节表示,或者如何将其保存到文件中?)

  • 扰乱字符串中的字符编码,从/转换为unicode或url/html实体或诸如此类的东西(它是二进制的,字符编码不适用于这里!)

  • 返回其他似乎不适合二进制存储的表示(即无法转换为字节序列)

有人知道有什么好的javascript压缩(+解压缩)实现适合我的二进制恋物癖吗?

我想我终于找到了我想要的东西:javascript中的deflate+inflate实现似乎可以将字符串作为字节序列使用。

首先创建一个闭包来保存二进制或十六进制或十进制标志

function ASearch() { }
ASearch.Flag = {
    Front_Wheel_Drive: 0xF, Rear_Wheel_Drive: 0xF0, Four_Wheel_Drive: 0xF00,
    Auto: 0xFF, Manual: 0xFF00,
    Gas: 0xF, Diesel: 0xF0, Hybrid: 0xF00, Electrical: 0xF000,
    Two: 1, Three: 2, Four: 4, Five: 8, Six: 16, Eight: 32, Ten: 64, Twelve: 128
};

然后像这样设置

SetFlag = (function (e) {
   e = e.srcElement;
   $("#" + e.parentNode.name).val(e.checked ?
        $("#" + e.parentNode.name).val() | ASearch.Flag[e.id] :
        $("#" + e.parentNode.name).val() ^ ASearch.Flag[e.id]);
});

这是32位整数中压缩数据的一个例子

有四个变量。。。我用它们做了18面旗帜。。这是一种快速高效的

例如。。。

int i = 0; //binary = 0000 0000 0000 0000
i = i | 255; //binary = 0000 0000 1111 1111
i = i ^ 255; //binary = 0000 0000 0000 0000
i = i | 0xFF00; //binary = 1111 1111 0000 0000
i = i | 255; //binary = 1111 1111 1111 1111
i = i ^ 0xFF00; //binary = 0000 0000 1111 1111