
我需要这样做,以便了解在传输过程中JPEG文件在哪里以及如何损坏。
VCDIFF-增量编码的格式和算法。 在RFC 3284中描述。
增量编码(Eng。Delta encoding) -一种以串行数据之间的差异(delta)形式而不是数据本身来表示数据的方式。
例如,为清楚起见,我使用Windows-1251中编码的文本文件。 但是,以同样的成功,它们可以是二进制文件。
资料来源:
" " ( source.txt ) " " ( target.txt )
您需要了解文件之间的区别:
" " ( source.txt -> target.txt ) " " ( target.txt -> source.txt )
我使用xdelta3程序,但我认为任何与vcdiff格式兼容的程序都可以。
如何获得
我们将需要另一个充满空格的文件:
" " ( spaces.txt )
它的大小必须等于或等于源文件(source.txt)
团队:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 -d -s spaces.txt
结果:
使用的标志:
-e
创建增量
-A
删除多余的标题
-n
删除crc(不允许将delta与其他源一起使用)
-s []
-与目标文件进行比较和还原的源
-d
从增量和源获取目标文件
如何运作
如果运行命令:
xdelta3 -e -A -n -s source.txt target.txt | xdelta3 printdelta
在所有标题之后,我们将看到VCDIFF命令
Offset Code Type1 Size1 @Addr1 + Type2 Size2 @Addr2 000000 025 CPY_0 9 S@0 000009 010 ADD 9 000018 025 CPY_0 9 S@14
VCDIFF格式本质上非常简单。 它由3个团队组成。
COPY
从源或目标复制数据
ADD
(添加)-将增量中存储的数据写入目标文件(其唯一数据不在源中)
RUN
(重复)-从增量重复一个字节指定次数
Delta仅存储唯一数据,并从源复制其余数据。 如果运行命令:
xdelta3 -e -A -n -s source.txt target.txt > target.vcdiff
我们将在增量中看到仅在目标文件中出现的单词“ changes”
D0A6D093D094200102011720131B2009 0302190D0A19200E
( JSON不喜欢特殊字符,所以我将它们翻译成十六进制 )
如果将增量应用到源(source.txt)上,那么我们将获得目标文件(target.txt)
xdelta3 -d -s source.txt target.vcdiff
用充满空格的文件(spaces.txt)替换源(source.txt),我们用空格替换了源文件和目标文件中重复的数据。
xdelta3 -d -s spaces.txt target.vcdiff
您可以在spaces.txt文件中使用任何其他字符。 主要条件是spaces.txt文件的大小大于或等于源文件的大小。
实际上,我比较了JPEG文件,如下所示:
xdelta3 -e -A -n -s bad_image.jpg good_image.jpg | xdelta3 -d -s spaces.txt
比较这些文件的结果:
许多空格和字节被“打”。 坏字节传输到十六进制。
测试可以测试比较方法的jpeg文件:
xdelta3 -e -A -n -s tortoise_bad.jpg tortoise.jpg | xdelta3 -d -s spaces.txt
比较这些文件的结果:
查看结果 F1BF F0B786 F39BAF F3BD94
坏字节传输到十六进制。