在文件的传输过程中,为了使大文件能够更加方便快速的传输,一般采用压缩的办法来对文件压缩后再传输,JAVA中的java.util.zip包中的Deflater和Inflater类为使用者提供了DEFLATE算法的压缩功能,以下是自已编写的压缩和解压缩实现,并以压缩文件内容为例说明,其中涉及的具体方法可查看JDK的API了解说明。

  1. /**
  2. *
  3. * @param inputByte
  4. * 待解压缩的字节数组
  5. * @return 解压缩后的字节数组
  6. * @throws IOException
  7. */
  8. public static byte[] uncompress(byte[] inputByte) throws IOException {
  9. int len = 0;
  10. Inflater infl = new Inflater();
  11. infl.setInput(inputByte);
  12. ByteArrayOutputStream bos = new ByteArrayOutputStream();
  13. byte[] outByte = new byte[1024];
  14. try {
  15. while (!infl.finished()) {
  16. // 解压缩并将解压缩后的内容输出到字节输出流bos中
  17. len = infl.inflate(outByte);
  18. if (len == 0) {
  19. break;
  20. }
  21. bos.write(outByte, 0, len);
  22. }
  23. infl.end();
  24. } catch (Exception e) {
  25. //
  26. } finally {
  27. bos.close();
  28. }
  29. return bos.toByteArray();
  30. }
  31.  
  32. /**
  33. * 压缩.
  34. *
  35. * @param inputByte
  36. * 待压缩的字节数组
  37. * @return 压缩后的数据
  38. * @throws IOException
  39. */
  40. public static byte[] compress(byte[] inputByte) throws IOException {
  41. int len = 0;
  42. Deflater defl = new Deflater();
  43. defl.setInput(inputByte);
  44. defl.finish();
  45. ByteArrayOutputStream bos = new ByteArrayOutputStream();
  46. byte[] outputByte = new byte[1024];
  47. try {
  48. while (!defl.finished()) {
  49. // 压缩并将压缩后的内容输出到字节输出流bos中
  50. len = defl.deflate(outputByte);
  51. bos.write(outputByte, 0, len);
  52. }
  53. defl.end();
  54. } finally {
  55. bos.close();
  56. }
  57. return bos.toByteArray();
  58. }
  59.  
  60. public static void main(String[] args) {
  61. try {
  62. FileInputStream fis = new FileInputStream("D:\\testdeflate.txt");
  63. int len = fis.available();
  64. byte[] b = new byte[len];
  65. fis.read(b);
  66. byte[] bd = compress(b);
  67. // 为了压缩后的内容能够在网络上传输,一般采用Base64编码
  68. String encodestr = Base64.encodeBase64String(bd);
  69. byte[] bi = uncompress(Base64.decodeBase64(encodestr));
  70. FileOutputStream fos = new FileOutputStream("D:\\testinflate.txt");
  71. fos.write(bi);
  72. fos.flush();
  73. fos.close();
  74. fis.close();
  75. } catch (Exception e) {
  76. //
  77. }
  78. }

JAVA中的deflate压缩实现的更多相关文章

  1. java解压多层目录中多个压缩文件和处理压缩文件中有内层目录的情况

    代码: package com.xiaobai; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce ...

  2. FFmpeg在JAVA中的使用-音频提取&字幕压缩

    由于项目需求中涉及到视频中音频提取,以及字幕压缩的功能,一直在研究ffmpeg,仅仅两个功能,却深受ffmpeg的折磨. 今天谈谈ffmpeg在java中的简单使用,首先下载FFmpeg包,官方地址: ...

  3. ASP.NET Web API中使用GZIP 或 Deflate压缩

    对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式. 那么如何实现对ASP.NET Web API 进行压缩呢,我将使用非常流行的库用于压缩/解压缩称为DotNetZip库.这个库可以使用Nu ...

  4. Java中的访问控制权限

    简介 Java中为什么要设计访问权限控制机制呢?主要作用有两点: (1)为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. (2) ...

  5. java中使用MD5加密技术

    在项目中经常会对一些信息进行加密,现在常用的信息加密技术有:MD5.RSA.DES等,今天主要说一下,md5加密,以及如何在java代码根据自己的业务需求使用md5. MD5简介: MD5即Messa ...

  6. 如何在 apache 中开启 gzip 压缩服务

    服务器设置 gzip 压缩是 web 开发里很普遍的做法.假设你要请求一个 100k 的文件,网络传输速度为 50k/s,需要 2s 才能得到数据,但是如果在服务器设置了 gzip 压缩,将服务端的文 ...

  7. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  8. java中常用的工具类(二)

    下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil           Java   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  9. 深入分析 Java 中的中文编码问题

    登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Del ...

随机推荐

  1. (博弈论)hdoj 1525 Euclid's Game

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1525 题目大意:Stan和Ollie在玩一个游戏,a和b两个数字,每次可以选择较大的数减去较小的数的若 ...

  2. 网站在域名前面添加logo小图标

    如何给界面添加logo?就像百度的首页出现的图标. 1.准备一个ICO格式的小图标. 2.将制作好的ICO文件放到tomcat下的“D:\apache-tomcat-6.0.16\webapps\RO ...

  3. MD5加密类方法

    package com.shkj.android.utils; import java.security.MessageDigest;import java.security.NoSuchAlgori ...

  4. 自行架设DNS的操作步骤及相关说明

    关于什么是DNS及相关的名词及说明,请看 http://www.wdlinux.cn/bbs/viewthread.php?tid=1081&highlight=dns这里,只是说明,在wdd ...

  5. C#实现XML文件数据库存储

    C#实现文件数据库 http://www.cnblogs.com/gaochundong/archive/2013/04/24/csharp_file_database.html#3100076 应用 ...

  6. IAR USING PRE- AND POST-BUILD ACTIONS

    Using pre-build actions for time stamping If necessary, you can specify pre-build and post-build act ...

  7. Java常见排序算法之冒泡排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  8. 容器的end()方法

    容器的end()方法,返回一个迭代器,需要注意:这个迭代器不指向实际的元素,而是表示末端元素的下一个元素,这个迭代器起一个哨兵的作用,表示已经处理完所有的元素. 因此,在查找的时候,返回的迭代器,不等 ...

  9. PS-文字如何竖排版

    单击文字输入工具“T”按钮,点住鼠标左键不要松手,会在“T”按钮的右边显示出其它形式的文字工具,拖动鼠标指向“直排文字”工具就可以了.

  10. Codeforces Educational Codeforces Round 5 A. Comparing Two Long Integers 高精度比大小,模拟

    A. Comparing Two Long Integers 题目连接: http://www.codeforces.com/contest/616/problem/A Description You ...