有限字符集的字符串压缩算法

概述

在开发中,经常有上报线上堆栈来分析处理线上问题的场景,所以,对堆栈的压缩和加密也是必不可少的。加密:可以使用AES对称加密算法,压缩:可以在上传时利用protobuf天生的压缩性对字符串进行压缩。

不过,出于对流量的节省和传输效率的提升,可以通过在堆栈上传前先压缩一次数据来保证。下面给大家介绍一种笔者自己摸索的一种压缩字符串的算法,并且自带加密效果。

算法介绍

此算法使用场景:有限字符集的字符串压缩。

例如Java方法全限定名的压缩,对于方法全限定来说,组成成分:大小写英文字母,数字,特殊字符。在开发过程中,一个标准且合格的类名,方法名需要做到见名知意,根据有效统计,方法全限定99%以上由大小写英文字母组成。

算法实现

压缩原理简述
将char字符的空闲bit位来存储有效的数据。比如通过将 a ~ z 映射成 1 ~ 26 的数字,并将Char类型以5bit为一组分为高、中、低三组,分别来存储一个数字(这一个数字代表一个字符)

建立字符串头结构: Head

在Java代码编写过程中,一个全限定字符串中的大写字母占比相对较小,因此,通过使用前补充字符的方式来记录全限定字符串中的大写字母。一个字符串如果是有限且不可变的,那么所组成他们的字符之间的相对位置是确定的。实现算法如下:

public char[] build(String s) {
   
            ...
    for (int i = 0; i < len; i++) {
   
        c = s.charAt(i);
        b = Character.isUpperCase(c);
        if (b || c == FILL) {
   
            if (i - lastIndex >= maxDistance) {
   
                maxDistance = i - lastIndex;
            }
            upCharIndex.add(i - lastIndex);
            lastIndex = i;
       }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉亭下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值