自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 增量压缩工具Xdelta3源码解析——字符串匹配

前言拖了这么长时间,终于把Xdelta3的字符串匹配解析做好了,这个部分是我们整个系列解析中最重要的部分,想要把它解释清楚说明白还真不是一件容易的事,着实费了我不少功夫。闲话少叙,直入主题。介绍Xdelta3中使用的字符串匹配策略是:局部贪婪,全局懒惰。在Xdelta3中定义了三种字符串匹配方式:RUN指令匹配、大匹配、小匹配,后面将按照开销程度依次介绍。在此之前,我们先定义几个变量:next_in:目标窗口的起始位置。avail_in:目标窗口的长度。input_position:目标

2021-10-26 17:00:00 2478 3

原创 增量压缩工具Xdelta3源码解析——地址编码

前言通过系列的前面几篇文章,我们对Xdelta3的使用、增量指令以及增量文件都有了详细的了解,从本章开始,我们将通过结合源码来深入讲解整个增量压缩的编码和解码过程。文章中贴源码的部分,我大多数情况下会以注释的形式进行解释,以便更准确地定位代码位置。地址缓存在之前讲解增量文件Window部分的时候,...

2021-09-15 10:20:22 2626 3

原创 增量压缩工具Xdelta3源码解析——增量文件(Window部分)

前言上一章我们详细解析了Xdelta3编码生成的增量文件的Header部分,这一章我们我们继续解析增量文件的Window部分。介绍在开始解析之前,要先介绍一个概念。我们将解码后生成的新文件称为解码时的目标文件,它本质上和编码时的目标文件是一样的。一般情况下,Xdelta3在编码目标文件时并不是一次性对整个目标文件进行编码,而是将目标文件分割成多个大小相近的目标窗口,将每个目标窗口依次单独编码;当然也有例外,当目标文件足够小,小到用一个预设的窗口的大小就足以进行编码时,就不会再分割了。(关于窗口选择算

2021-09-08 16:39:57 2864

原创 增量压缩工具Xdelta3源码解析——增量文件(Header部分)

前言通过上一章我们详细介绍了Xdelta3定义的三种增量指令后,本章来解析一下差分编码时生成的增量文件。由于内容比较多,所以这部分会分为两章来进行解析,这一章先对增量文件的头部内容进行详细讲解,下一章将对增量文件的解码窗口内容进行详细讲解。废话不多说,让我们开始吧!增量文件头部解析先做个简单的回顾,增量文件是Xdelta3进行编码操作的产物,在进行解码操作时使用。解码时将与编码时完全相同的源文件和增量文件进行一系列的解码操作后,就能得到与编码时完全相同的目标文件,因此在进行增量更新的过程中,增量文件

2021-09-03 10:16:58 2963

原创 增量压缩工具Xdelta3源码解析——增量指令

前言上一章我们介绍了开源工具Xdelta3的使用,这章我们来介绍一下Xdelta3的增量指令。首先我们回顾一下,Xdelta3是将源文件与目标文件进行比较差分,生成一个增量文件,这个增量文件的大小理论上要小于目标文件,这样使用增量更新才有意义。那这个增量文件里包含了什么呢?其实主要就是一堆的增量指令,在合并源文件和增量文件时,根据这些增量指令来生成合并后的新文件(即目标文件)。简单来说,就是增量指令指示了目标文件中数据内容的处理。增量指令增量指令也称delta指令,Xdelta3中定义了三种增量

2021-08-25 11:17:44 3511

原创 增量压缩工具Xdelta3源码解析——工具使用

介绍Xdelta3是一款对二进制文件进行增量差分的开源工具,其同时实现了生成patch包和应用patch包的功能。本系列将会对Xdelta3的源码进行详细解析,本章先介绍Xdelta3工具的使用,后续内容将会持续更新,感兴趣的可以先点个关注哦~工具使用该工具支持跨平台使用,为了演示方便,本系列的所有操作将在Linux上进行。前期准备仅作为演示需要,我们先用C语言随便写一点内容:#include <stdio.h>int add(int a, int b){ return

2021-08-23 16:02:35 3758

原创 浅析Base-128编码约定

前言最近在研究的Xdelta3源码中使用了一种叫做VCDIFF的编码格式,为了可移植性,VCDIFF使用了Base-128的编码约定,下面我们就来简单介绍一下Base-128编码约定。Base-128它是一种可移植的、可变大小的编码格式,适用于所有8位字节的系统;所谓Base-128编码就是使用一个字节中的低7位进行编码,因为最高有效位(第7位)的值为128,故而得名Base-128。编码打个比方,一个32位的unsigned int类型的数值123456789,它的二进制表示为000001110

2021-07-26 16:17:45 5785

原创 C/C++中通过结构体/类中的某个成员变量的内存地址,获取其在结构体/类中的偏移量

引言这段时间因为工作需要在研究开源工具Xdelta3的源码 ,发现了其中一个很有趣但不算常见的操作,先贴一下源码:static inline xd3_rinst *xd3_rlist_entry(xd3_rlist *l) { return (xd3_rinst *)((char *)l - (ptrdiff_t) & ((xd3_rinst *)0)->link); }补充一下上面语句中出现的几个类型定义:typedef unsigned char uin

2021-07-07 21:16:45 3124 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除