Java GZIP压缩与解压缩代码实例

 更新时间:2020年01月09日 14:32:21   作者:那些年的代码  
这篇文章主要介绍了Java GZIP压缩与解压缩代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了Java GZIP压缩与解压缩代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.GZIP压缩

public static byte[] compress(String str, String encoding) {
    if (str == null || str.length() == 0) {
      return null;
    }
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    GZIPOutputStream gzip;
    try {
      gzip = new GZIPOutputStream(out);
      gzip.write(str.getBytes(encoding));
      gzip.close();
    } catch ( Exception e) {
      e.printStackTrace();
    }
    return out.toByteArray();
  }

2.GZIP解压缩

public static byte[] uncompress(byte[] bytes) {
    if (bytes == null || bytes.length == 0) {
      return null;
    }
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ByteArrayInputStream in = new ByteArrayInputStream(bytes);
    try {
      GZIPInputStream ungzip = new GZIPInputStream(in);
      byte[] buffer = new byte[256];
      int n;
      while ((n = ungzip.read(buffer)) >= 0) {
        out.write(buffer, 0, n);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return out.toByteArray();
  }

3.工具代码集合

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZIPUtils {
  public static final String GZIP_ENCODE_UTF_8 = "UTF-8"; 
  public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1";

  
  public static byte[] compress(String str, String encoding) {
    if (str == null || str.length() == 0) {
      return null;
    }
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    GZIPOutputStream gzip;
    try {
      gzip = new GZIPOutputStream(out);
      gzip.write(str.getBytes(encoding));
      gzip.close();
    } catch ( Exception e) {
      e.printStackTrace();
    }
    return out.toByteArray();
  }
  
  public static byte[] compress(String str) throws IOException { 
    return compress(str, GZIP_ENCODE_UTF_8); 
  }
  
  public static byte[] uncompress(byte[] bytes) {
    if (bytes == null || bytes.length == 0) {
      return null;
    }
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ByteArrayInputStream in = new ByteArrayInputStream(bytes);
    try {
      GZIPInputStream ungzip = new GZIPInputStream(in);
      byte[] buffer = new byte[256];
      int n;
      while ((n = ungzip.read(buffer)) >= 0) {
        out.write(buffer, 0, n);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return out.toByteArray();
  }
  
  public static String uncompressToString(byte[] bytes, String encoding) { 
    if (bytes == null || bytes.length == 0) { 
      return null; 
    } 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    ByteArrayInputStream in = new ByteArrayInputStream(bytes); 
    try {
      GZIPInputStream ungzip = new GZIPInputStream(in); 
      byte[] buffer = new byte[256]; 
      int n; 
      while ((n = ungzip.read(buffer)) >= 0) { 
        out.write(buffer, 0, n); 
      } 
      return out.toString(encoding);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
  
  public static String uncompressToString(byte[] bytes) { 
    return uncompressToString(bytes, GZIP_ENCODE_UTF_8); 
  } 
  
  public static void main(String[] args) throws IOException {
    String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    System.out.println("字符串长度:"+s.length());
    System.out.println("压缩后::"+compress(s).length);
    System.out.println("解压后:"+uncompress(compress(s)).length);
    System.out.println("解压字符串后::"+uncompressToString(compress(s)).length());
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 使用Feign远程调用时,序列化对象失败的解决

    使用Feign远程调用时,序列化对象失败的解决

    这篇文章主要介绍了使用Feign远程调用时,序列化对象失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 详解Java中格式化日期的DateFormat与SimpleDateFormat类

    详解Java中格式化日期的DateFormat与SimpleDateFormat类

    DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat类完成,下面我们具体来看一下两个类的用法:
    2016-05-05
  • 一文彻底了解Java的组合模式

    一文彻底了解Java的组合模式

    组合模式(Composite Pattern)指将对象组合成树形结构以表示“部分-整体”的层次结构, 使得用户对单个对象和组合对象的使用具有一致性。本文就来带大家深入了解一下Java的组合模式吧
    2023-02-02
  • Maven仓库的具体使用(本地仓库+远程仓库)

    Maven仓库的具体使用(本地仓库+远程仓库)

    Maven 在某个统一的位置存储所有项目的构件,这个统一的位置,我们就称之为仓库,本文主要介绍了Maven仓库的具体使用(本地仓库+远程仓库),感兴趣的可以了解一下
    2023-11-11
  • Java的Spring框架中实现发送邮件功能的核心代码示例

    Java的Spring框架中实现发送邮件功能的核心代码示例

    这篇文章主要介绍了Java的Spring框架中实现发送邮件功能的核心代码示例,包括发送带附件的邮件功能的实现,需要的朋友可以参考下
    2016-03-03
  • IDEA创建parent项目(聚合项目)

    IDEA创建parent项目(聚合项目)

    这篇文章主要介绍了IDEA创建parent项目(聚合项目),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Mybatis结果集映射一对多简单入门教程

    Mybatis结果集映射一对多简单入门教程

    本文给大家介绍Mybatis结果集映射一对多简单入门教程,包括搭建数据库环境的过程,idea搭建maven项目的代码详解,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-06-06
  • 解决Swagger修改请求对象字段文档不更新问题

    解决Swagger修改请求对象字段文档不更新问题

    这篇文章主要为大家介绍了解决Swagger修改请求对象字段文档不更新的问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java如何实现单链表的增删改查

    Java如何实现单链表的增删改查

    这篇文章主要给大家介绍了关于Java如何实现单链表的增删改查的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Spring Boot解决循环依赖的过程详细记录

    Spring Boot解决循环依赖的过程详细记录

    这篇文章主要介绍了Spring Boot解决循环依赖的过程,Spring框架通过三级缓存机制解决循环依赖问题,分别为singletonObjects、earlySingletonObjects和singletonFactories,需要的朋友可以参考下
    2024-09-09

最新评论