博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA——GZIP压缩与解压缩
阅读量:2036 次
发布时间:2019-04-28

本文共 4237 字,大约阅读时间需要 14 分钟。

基本概念

GZIP编码:GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的。我们在中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种格式,或者说一种文件格式。

HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的。

解决方案

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();    }

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();    }

工具类

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());    }}

参考文章

转载地址:http://pnwof.baihongyu.com/

你可能感兴趣的文章
ubuntu下安装nginx
查看>>
Linux 更改文件名
查看>>
Linux下安装Elasticsearch5.X
查看>>
linux命令ps aux|grep xxx详解
查看>>
MySQL常见问题
查看>>
Spring Boot 入门之缓存和 NoSQL 篇(四)
查看>>
使用Docker高效搭建开发环境
查看>>
微服务下的数据架构
查看>>
Nginx 容器教程
查看>>
linux下的命令: sudo ln -s 源文件 目标文件
查看>>
关于 Mybatis mapping.xml中的 StatementType 知识点
查看>>
小议“悲观锁和乐观锁”的原理、场景、示例
查看>>
面试中的这些坑,你踩过几个?
查看>>
socket,tcp,http三者之间的区别和原理
查看>>
Spring AOP 最热门面试题及答案
查看>>
Union和Union All到底有什么区别
查看>>
java读取txt文件,使用正则表达式获取信息
查看>>
exists\not exists和in\not in效率
查看>>
SQL删除重复数据只保留一条
查看>>
SonarQube 跳过指定检查
查看>>