VB(Variable byte, 可变字节)编码利用整数个字节来对间距编码。字节的后7 位是间距的有效编码区,而第1 位是延续位(continuation bit)。如果该位为1,则表明本字节是某个间距编码的最后一个字节,否则不是。要对一个可变字节编码进行解码,可以读入一段字节序列,其中前面的字节的延续位都为0,而最后一个字节的延续位为1。根据上述标识可以把每个字节的7 位部分抽取出来并连接在一起形成编码。图5-8 给出了VB编码和解码的伪代码,表5-4 给出了一个采用VB编码的例子①。
图5-8 采用VB 的编码和解码过程。div 和mod 函数分别计算整数相除和相除后的
余数。PREPEND 在表头部增加一个元素。比如 PREPREND((1,2),3)=(3,1,2)。
EXTEND 表示将表合并,比如,EXTEND((1,2),(3,4))=(1,2,3,4)
代码实现:
package test3;
import java.math.BigInteger;
import java.util.LinkedList;
public class VariByteCode {
public static void main(String[] args){
int n=824;
System.out.println("测试的间隔大小为"+n);
LinkedList<String> byteStream=VBEncode(n);
System.out.println("可变字节码的二进制形式:"+byteStream); //输出VB编码
int number=VBDecode(b