关于RFC3284-VCDIFF格式的说明

时间:2018-07-20 23:35:00

标签: vcdiff

我是尝试阅读此类文档的新手,而我对VCDIFF指令的工作方式感到困惑,这是原始文档:

https://tools.ietf.org/html/rfc3284

此部分:

  ADD:  This instruction has two arguments, a size x and a sequence
        of x bytes to be copied.
  COPY: This instruction has two arguments, a size x and an address
        p in the string U.  The arguments specify the substring of U
        that must be copied.  We shall assert that such a substring
        must be entirely contained in either S or T.
  RUN:  This instruction has two arguments, a size x and a byte b,
        that will be repeated x times.

现在文档放了一个例子:

     a b c d e f g h i j k l m n o p
     a b c d w x y z e f g h e f g h e f g h e f g h z z z z

     COPY  4, 0
     ADD   4, w x y z
     COPY  4, 4
     COPY 12, 24
     RUN   4, z

我不了解每个操作员所做的事情,我认为第一个副本是第一个“ abcd”,现在添加的内容包括“ wxyz”,现在我不太了解接下来的两个副本是如何工作的。

如果我认为有人可以显示该指令的内容(例如“此指令将字符串作为结果,下一个此字符串作为结果”)会很有用,则可以逐步比较:D

谢谢。

1 个答案:

答案 0 :(得分:1)

在执行此操作时,您似乎知道输出的长度。在此“语言”中,输入和输出在“内存”中是连续的。因此,您从以下开始:

abcdefghijklmnop----------------------------
|<-     S    ->||<-            T         ->|

组合字符串中从偏移量0开始的第一个COPY前4个字节:

ABCDefghijklmnopABCD------------------------
|<-     S    ->||<-            T         ->|

然后ADD 4个字节,实际上是w x y z

abcdefghijklmnopabcdWXYZ--------------------
|<-     S    ->||<-            T         ->|

然后COPY 4个字节,从偏移量4开始:

abcdEFGHijklmnopabcdwxyzEFGH----------------
|<-     S    ->||<-            T         ->|

然后从偏移量24开始COPY 12个字节。这有点棘手,因为偏移量24是我们刚刚写的“ efgh”,我们还没有写最后8个字节,但是如果您这样做的话一次一个字节无关紧要:

                        |<- from ->|
                            |<-  to  ->|
abcdEFGHijklmnopabcdwxyzefghEFGHEFGHEFGH----
|<-     S    ->||<-            T         ->|

最后有一个RUN,由4个连续字节组成,全为“ z”:

abcdEFGHijklmnopabcdwxyzefghefghefghefghZZZZ
|<-     S    ->||<-            T         ->|