1.Snappy-java项目地址

https://github.com/xerial/snappy-java

2.Snappy-java两种压缩方式

使用Snappy.compress进行压缩

String dataString = "The quick brown fox jumps over the lazy dog";
byte[] compressed = Snappy.compress(dataString.getBytes("UTF-8"));
byte[] uncompressed = Snappy.uncompress(compressed);
String result = new String(uncompressed, "UTF-8");
System.out.println(result);

使用SnappyInputStream进行压缩

    public static byte[] compressSnappy(byte[] data) throws IOException {
ByteArrayInputStream is = new ByteArrayInputStream(data);
ByteArrayOutputStream os = new ByteArrayOutputStream();
SnappyOutputStream sos = new SnappyOutputStream(os);
int count;
byte temp[] = new byte[BUFFER];
try {
while ((count = is.read(temp)) != -1) {
sos.write(temp, 0, count);
}
sos.flush();
byte[] output = os.toByteArray();
return output;
} finally {
sos.close();
is.close();
}

3.两种压缩方式的区别

    /**
* 输出如下:
* Snappy.compress 压缩结果:2b a8 54 68 65 20 71 75 69 63 6b 20 62 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67
* SnappyInputStream压缩结果:82 53 4e 41 50 50 59 00 00 00 00 01 00 00 00 01 00 00 00 2d 2b a8 54 68 65 20 71 75 69 63 6b 20 62 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67
* |---------------------magic header(16bytes)-----|size(4bytes)|----compressed data-----
*/
@Test
public void testSnappyCompress() throws Exception {
String dataString = "The quick brown fox jumps over the lazy dog";

byte[] compressedData = Snappy.compress(dataString.getBytes());
System.out.println("Snappy.compress 压缩结果:" + bytes2hex(compressedData));

byte[] compressedData2 = compressSnappy(dataString.getBytes());
System.out.println("SnappyInputStream压缩结果:" + bytes2hex(compressedData2));
}
/**
* 将byte数组按16进制的方式输出
*/
public static String bytes2hex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
String tmp = null;
for (byte b : bytes) {
// 将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制
tmp = Integer.toHexString(0xFF & b);
if (tmp.length() == 1) {
tmp = "0" + tmp;
}
sb.append(tmp).append(" ");
}
return sb.toString();
}

区别如下:

通过Snappy.compress()进行压缩,压缩后的数据没有magic header

通过SnappyInputStream进行压缩,压缩后的数据有固定的header

最新文章

  1. 用 python 实现一个多线程网页下载器
  2. 2016HUAS_ACM暑假集训2B - The Suspects(感染者)
  3. java读取package中的properties文件java.util.MissingResourceException
  4. 8款JS框架比较
  5. JQuery easyui (4)LinkButtion(按钮)组件
  6. Git打补丁常见问题
  7. JavaEE(14) - JPA关联映射
  8. Intel Core Microarchitecture Pipeline
  9. Python3 SMTP发送邮件
  10. Coursera-AndrewNg(吴恩达)机器学习笔记——第三周编程作业
  11. SSM-SpringMVC-02:SpringMVC最简单的小案例
  12. vue 手写组件 集合
  13. Json To CSharp
  14. Java的jdk1.6与jre1.8中存在的差异
  15. 超酷JQuery动画分页按钮,鼠标悬停滑动展开
  16. Rhythmk 学习 Hibernate 09 - Hibernate HQL
  17. JDK7,8,JD9的hashmap,hashtable,concurrenthashmap及他们的区别
  18. OCP认证052考试最新考试题库和答案整理-33
  19. java static代码块执行时机
  20. 介绍几个C#正则表达式工具

热门文章

  1. eslint 检查单个文件的错误
  2. vue.js-动态绑定class 利用index实现导航
  3. flutter vscode 小插件
  4. js前台传数组,java后台接收转list,前后台用正则校验
  5. 手动集成 Ironic 裸金属管理服务(Rocky)
  6. 安装Redis-cluster-gem install redis报错的解决方案
  7. Linux 下 Mysql忘记密码重置
  8. Linux:lvm磁盘分区,动态扩容
  9. Cocos2d-x入门之旅
  10. office web apps安装部署,配置https,负载均衡(七)配置过程中遇到的问题详细解答