采用VB的编码和解码过程(VB encoding and decoding)

本文介绍了VB(Variable Byte)编码的概念,这是一种利用字节的7位有效编码区进行间距编码的方法。编码过程中,通过延续位标识字节是否为序列的最后一个。解码时,读取延续位为0的字节序列,直到遇到延续位为1的字节。VB编码在实验中实现了对Reuters-RCV1语料库索引超过50%的压缩率,且适用于不同长度的编码单位,如字节、位等。在压缩率和解压速度之间找到了平衡。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值