支持BINARY数据的javascript压缩算法?

时间:2012-03-29 10:09:44

标签: javascript algorithm encoding binary compression

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

“二进制数据”是指一系列字节,可以采用以下任何一种形式:

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

现在显然有各种各样的javascript实现可用于各种算法。然而,我发现的一切似乎都是疯狂的东西,如:

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

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

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

有人知道一个适合我的二元恋物癖的好的javascript压缩(+解压缩)实现吗?

2 个答案:

答案 0 :(得分:1)

我认为我毕竟找到了我想要的东西:this deflate + inflate implementation in javascript似乎使用字符串作为字节序列。

答案 1 :(得分:-3)

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

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