7-bit 压缩法,针对Integer数据的一种压缩算法,可以将4个字节的Int型数据压缩为1~5个字节,数值越小,压缩后的字节数越少,所以对值小的Int型数据会有比较好的压缩效果,其具体压缩原理,算法如下:
- 将一个Int型数据转换成32位;
- 0~6位,按原值写入;
- 如果原值的第7位及以后存在1,则转换后的byte的最高位写入1,否则写入0,结束写入(即压缩为了1个字节) ;
- 如果没结束,则写入原值的第7~13位,如果原值的第14位及以后存在1,则转换后byte的最高位写入1,否则写入0,结束写入 ;
- 重复上述行为,直到写完为止 。
下面的代码就是一个7-bit压缩算法的实现:
private final static int VALUE_MASK = 0x7f;
private final static int NEXT_BIT_SHIFT = 7;
private final static int NEXT_BIT_MASK = 1 << 7;
public static int putCompressedInt(OutputStream out,final int value) throws IOException {
int i = 0;
int tmpValue = value;
do {
byte b = (byte) (tmpValue & VALUE_MASK);
tmpValue >>&g