在Java中提供Deflater和Inflater工具类来压缩/解压缩数据。 这两个工具类采用zlib算法,下面给出一个封装好的工具。

Java代码
  1. /**
  2. * util for compress/decompress data
  3. *
  4. * @author lichengwu
  5. * @version 1.0
  6. * @created 2013-02-07 10:14 AM
  7. */
  8. public final class CompressionUtil {
  9. private static final int BUFFER_SIZE = 4 * 1024;
  10. /**
  11. * compress data by {@linkplain Level}
  12. *
  13. * @author lichengwu
  14. * @created 2013-02-07
  15. *
  16. * @param data
  17. * @param level
  18. * see {@link Level}
  19. * @return
  20. * @throws IOException
  21. */
  22. public static byte[] compress(byte[] data, Level level) throws IOException {
  23. Assert.notNull(data);
  24. Assert.notNull(level);
  25. Deflater deflater = new Deflater();
  26. // set compression level
  27. deflater.setLevel(level.getLevel());
  28. deflater.setInput(data);
  29. ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
  30. deflater.finish();
  31. byte[] buffer = new byte[BUFFER_SIZE];
  32. while (!deflater.finished()) {
  33. int count = deflater.deflate(buffer); // returns the generated
  34. // code... index
  35. outputStream.write(buffer, 0, count);
  36. }
  37. byte[] output = outputStream.toByteArray();
  38. outputStream.close();
  39. return output;
  40. }
  41. /**
  42. * decompress data
  43. *
  44. * @author lichengwu
  45. * @created 2013-02-07
  46. *
  47. * @param data
  48. * @return
  49. * @throws IOException
  50. * @throws DataFormatException
  51. */
  52. public static byte[] decompress(byte[] data) throws IOException, DataFormatException {
  53. Assert.notNull(data);
  54. Inflater inflater = new Inflater();
  55. inflater.setInput(data);
  56. ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
  57. byte[] buffer = new byte[BUFFER_SIZE];
  58. while (!inflater.finished()) {
  59. int count = inflater.inflate(buffer);
  60. outputStream.write(buffer, 0, count);
  61. }
  62. byte[] output = outputStream.toByteArray();
  63. outputStream.close();
  64. return output;
  65. }
  66. /**
  67. * Compression level
  68. */
  69. public static enum Level {
  70. /**
  71. * Compression level for no compression.
  72. */
  73. NO_COMPRESSION(0),
  74. /**
  75. * Compression level for fastest compression.
  76. */
  77. BEST_SPEED(1),
  78. /**
  79. * Compression level for best compression.
  80. */
  81. BEST_COMPRESSION(9),
  82. /**
  83. * Default compression level.
  84. */
  85. DEFAULT_COMPRESSION(-1);
  86. private int level;
  87. Level(
  88. int level) {
  89. this.level = level;
  90. }
  91. public int getLevel() {
  92. return level;
  93. }
  94. }
  95. }

转载于:https://blog.51cto.com/ajiao13/1133116

Java压缩/解压缩二进制文件相关推荐

  1. java压缩/解压缩zip格式文件

    因为项目要用到压缩.解压缩zip格式压缩包,只好自己封装一个,对于网上流行的中文乱码的问题,本文的解决方法是用apache的包代替jdk里的.基本上还是比较好用的. 废话少说,直接上代码. 1 pac ...

  2. Java 压缩解压缩 第三方组件,推荐一个强大的Java开发工具类库!

    feilong开发更简便的工具库 Reduce development, Release ideas (灵感从重复简单的代码中释放出来) 让你从大量重复的底层代码中脱身,提高工作效率; 让你的代码更简 ...

  3. java压缩解压缩完整例子(仅支持lzh格式)

    把下面文件放入同一目录下,运行使用 Run As Java Application 即可 //文件DirectoryZip.java,  压缩文件例子 import  java.io.File; im ...

  4. java压缩解压缩类实例[转]

    package com.yangxiaozuo.util; import java.io.ByteArrayOutputStream;   import java.io.IOException;   ...

  5. java压缩解压缩_利用Java实现压缩与解压缩(zip、gzip)支持中文路径

    zip扮演着归档和压缩两个角色:gzip并不将文件归档,仅只是对单个文件进行压缩,所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩. Java I/O类库还 ...

  6. java压缩解压缩rar、zip文件

    来源https://www.open-open.com/lib/view/open1363592512046.html 被zip 折腾的要死,特意记录一下来,以后防翻车 package cn.com. ...

  7. java 压缩技术_Java压缩技术(三) ZIP解压缩——Java原生实现

    JavaEye的朋友跟我说:"你一口气把ZIP压缩和解压缩都写到一个帖子里,我看起来很累,不如分开好阅读".ok,面向读者需求,我做调整,这里单说ZIP解压缩! 相关链接: Jav ...

  8. Java压缩技术(三) ZIP解压缩——Java原生实现

    转载自   Java压缩技术(三) ZIP解压缩--Java原生实现 解压缩与压缩运作方式相反,原理大抵相同,由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInp ...

  9. java使用tar算法压缩解压缩文件、数据流、byte[]字节数组

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用tar算法压缩解压缩文件.数据流.byte[]字节数组 需要添加org.apache.commons.compress包,下载 测试代 ...

最新文章

  1. ABAP 读EXCEL 到内表
  2. bootstraptable 分页循环_关于bootstrap-table服务端分页问题
  3. python正则去除换行符,关于python:用于删除换行符的正则表达式
  4. 在Spring Boot中实现相关ID(用于SOA /微服务中的分布式跟踪)
  5. php7 字符串,php7 参数、整形及字符串处理机制修改实例分析
  6. [蛋蛋无厘头日记]约会ing~~
  7. Educational Codeforces Round 9 B. Alice, Bob, Two Teams 前缀和
  8. Atitit 前端技术体系 目录 1. 基础系列 2 1.1. NUI CLI GUI 2 1.2. MVC WEBFORM PAGE模式 stage模式 2 2. 技术应用系列 2 2.
  9. BZOJ1143[CTSC2008] 祭祀river
  10. 「经典题」完整的前端项目开发流程
  11. 锁的等级:方法锁、对象锁、类锁。
  12. Oracle VM VirtualBox固定ip
  13. SQLite attach detach 心得
  14. 傅福:我可能是杭州接受BCH付款的第一个数码商家
  15. 如何在Linux系统中安装DBeaver通用数据库工具
  16. Word转pdf一个方法就可以完成~手机电脑都可以免费使用~办公必备
  17. DirectX 性能优化
  18. 改良型新药之详细分类
  19. 硬件设备PS/2指的是什么?都有什么用途?
  20. 回溯法求解N皇后问题

热门文章

  1. [Web Chart系列之五] 3. 实战draw2d 之图形填充色(纯色 or 渐变)
  2. html5 ul下的li重叠解决,html – 如何仅在嵌套的ul中悬停当前的li?
  3. php循环的应用案例,php for循环的实例分享
  4. jdbc显示mysql的数据_JDBC链接mysql插入数据后显示问号的原因及解决办法
  5. eggjs增删改查MySQL,nodejs操作mysql实现增删改查
  6. linux 设置端口常用命令
  7. Git 将本地的一个分支上的代码合并到本地的另一个分支
  8. JavaScript中的XMLHttpRequest对象
  9. c语言宏定义替换字符串,C语言中,宏替换的替换规则
  10. html设置设置字母间的距离,css如何设置字母间距?字母间距的设置方法