求C#字符串压缩 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yy1984
V2EX    .NET

求C#字符串压缩

  •  
  •   yy1984 2013-09-24 08:47:46 +08:00 8436 次点击
    这是一个创建于 4415 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网上搜索了一下,没一个能用的,基本上都是用GZip把1000字节压缩成1500字节,太蛋疼了。

    或者谁有这样的思路?我的字符串很简单,0-9还有“,”,共11种字符,但长度不限,想至少压缩一半的长度。
    9 条回复    1970-01-01 08:00:00 +08:00
    heganj
        1
    heganj  
       2013-09-24 09:27:54 +08:00
    转成16进制、甚至36进制压缩、如果数字没有Long的最大值大,可以考虑writeLong和ReadLong。这两点是起码能想到的
    luikore
        2
    luikore  
       2013-09-24 09:35:10 +08:00
    11*11=121

    先用表 ('0'-'9' => 0-9, ',' => 10) 转换成 0-10 的整数, 然后两字节压成一字节即可:
    result = b1 * 11 + b2

    解压时 b2 = result % 11; b1 = (result - b2) / 11 再查表还原
    webflier
        3
    webflier  
       2013-09-24 09:40:26 +08:00   1
    LZ4
    https://code.google.com/p/lz4/
    有c#的版本。
    速度快,json,xml之类的文本能压缩一半。
    yushiro
        4
    yushiro  
       2013-09-24 10:12:57 +08:00
    @webflier 这个不错,收藏了~
    mikawudi
        5
    mikawudi  
       2013-09-24 13:59:04 +08:00
    通讯端和服务端都是自己写的话....编码下不就好了.....11种字符用4位做编码,一个byte高4位一个字符,低四位一个字符....完事了,和ascii比正好压缩一半长度
    luikore
        6
    luikore  
       2013-09-24 18:41:48 +08:00
    @webflier 楼主的数据是 gzip 后反而变长, LZ4 LZW LZSS LZMA 等估计也没效果
    webflier
        7
    webflier  
       2013-09-24 20:30:42 +08:00 via Android
    @luikore 是,我没仔细看就回复了。楼主的文本涉及的字符比较少,可用伙夫慢树写一个简单的算法,再结合5楼的方法。。。。。压缩率应该挺好看的
    luikore
        8
    luikore  
       2013-09-24 20:44:42 +08:00
    @webflier gzip 就是滑动窗口字典(LZ77)结合霍夫曼编码...
    mikawudi
        9
    mikawudi  
       2013-09-26 17:31:50 +08:00
    哈夫曼编码在这没啥用,毕竟表示的位数本来就很短...哈夫曼编码后,间隔符浪费的空间占比都很大....话说才看到2L大哥的编码方式....貌似只要7位的说....比BCD编码强不过'0'->0不大好吧,不然连续的多个0会被识别成串尾
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2497 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 03:49 PVG 11:49 LAX 20:49 JFK 23:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86