网站首页 > 技术文章 正文
为了方便调试,最近想把项目中的代码加一下sourceMap,所以就去研究了一下,在研究的过程中发现sourceMap使用了一种叫base64-vlq的编码方式,那么这篇文章我们就先来聊一聊这种编码方式的原理,看看它和base64有什么样的关系?
如果你还不了解base64编码的原理,可以先看一下我之前的一篇文章详解base64和latin1的编码原理
base64-vlq的简介
编码的目的大多数是为了安全或者压缩传输大小,这种编码方式就是借用Base64的字符表去表示各种数值!
base64-vlq的原理
我们直接看一个例子,这样比总结方式更加直观。
现在把1024用base64-vql编码方式表示!
1、首先我们把1024转化为二进制——1 00000 00000,一共11位;
2、在最右边补充符号位,因为1024是正数,所以最右边补充一个0——10 00000 00000,此时一共12位;
3、现在从最右边向左边每隔5位划分为一组,不足五位的左边补充0——00010 00000 00000,一共15位;
4、将组的位置顺序颠倒一下——00000 00000 00010;
5、在最左边为每组补充一位,如果这组是这个数值的最后一组,那么就补充0,前面的组都补充1——100000 100000 000010(32 32 2),一共18位;
好了,现在就可以把它转化为base64了,我们把base64字符表再贴上来,如下:
6、对应一下图2中base64字符表,最后转为ggC。
接下来我们再看一个负数的例子,把-168用这种编码方式表示!
1、先把168转化为二进制——10101000;
2、在最右边补充符号位,现在是负数,所以要补充1——1010 10001,一共9位;
3、分组并且把不足五位的补充0——01010 10001,一共10位;
4、组的位置颠倒顺序——10001 01010;
5、在最左边补充连续位——110001 001010(49 10),一共12位;
6、对照base64字母表,最后编码为xK。
如果你看完上面两个例子,我相信你稍微加以思考就能掌握原理了。如果在实际转换中不确定结果是否正确,可以在http://murzwin.com/base64vlq.html这个工具上加以验证!
总结
在研究sourceMap原理的过程中发现原来还有这样的编码,不过编码方式还是非常容易掌握的,后面我会继续研究sourceMap的原理并且输出相关知识点!
喜欢我的文章就关注我吧,有问题可以发表评论,我们一起学习,共同成长!
猜你喜欢
- 2024-11-17 H.265已落后!下一代视频技术实现重大突破
- 2024-11-17 Chrome浏览器必备的几款神器插件(chrome浏览器必备的几款神器插件有哪些)
- 2024-11-17 插件介绍及使用—鸡血插件助你压缩文件并发送邮件
- 2024-11-17 黑客爆破攻击Sql Server,已控制数百台企业服务器和网站
- 2024-11-17 c#.Net.NetCore面试(四十五)c#/net/netcore文件转base64
- 2024-11-17 使用GZipStream实现压缩和解压缩(gzip压缩算法)
- 2024-11-17 索尼正开发新数据压缩技术:可将游戏文件大小缩小 60%
- 2024-11-17 《调教命令行07》压缩解压(有64KB彩蛋)
- 2024-11-17 如何解决get请求URL参数过长的问题?
- 2024-11-17 分享Java实现图片转换base64的两种方法
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)