使用GZIPOutputStream进行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 (IOException e) {ApiLogger.error("gzip compress error.", e);}return out.toByteArray();}

使用GZIPInputStream进行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 (IOException e) {ApiLogger.error("gzip uncompress error.", e);}return out.toByteArray();}

完整代码:

package com.weibo.api.proxy.server.util;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;import org.apache.commons.codec.binary.StringUtils;import cn.sina.api.commons.util.ApiLogger;/*** * @author wenqi5* */
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";/*** 字符串压缩为GZIP字节数组* * @param str* @return*/public static byte[] compress(String str) {return compress(str, GZIP_ENCODE_UTF_8);}/*** 字符串压缩为GZIP字节数组* * @param str* @param encoding* @return*/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 (IOException e) {ApiLogger.error("gzip compress error.", e);}return out.toByteArray();}/*** GZIP解压缩* * @param bytes* @return*/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 (IOException e) {ApiLogger.error("gzip uncompress error.", e);}return out.toByteArray();}/*** * @param bytes* @return*/public static String uncompressToString(byte[] bytes) {return uncompressToString(bytes, GZIP_ENCODE_UTF_8);}/*** * @param bytes* @param encoding* @return*/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 (IOException e) {ApiLogger.error("gzip uncompress to string error.", e);}return null;}public static void main(String[] args) {String str ="%5B%7B%22lastUpdateTime%22%3A%222011-10-28+9%3A39%3A41%22%2C%22smsList%22%3A%5B%7B%22liveState%22%3A%221";System.out.println("原长度:" + str.length());System.out.println("压缩后字符串:" + GZIPUtils.compress(str).toString().length());System.out.println("解压缩后字符串:" + StringUtils.newStringUtf8(GZIPUtils.uncompress(GZIPUtils.compress(str))));System.out.println("解压缩后字符串:" + GZIPUtils.uncompressToString(GZIPUtils.compress(str)));}
}

Java使用GZIP进行压缩和解压缩(GZIPOutputStream,GZIPInputStream)相关推荐

  1. java putnextentry_Java对zip格式压缩和解压缩

    Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格 ...

  2. Java代码实现字符串压缩和解压缩

    在 IO流中我们一般操作文件的输出和输入,但是很少看见字符串压缩和解压缩的操作,本文中将带你了解不一般的IO流操作 目录 一.使用`gzip`进行压缩 二.使用`gzip`进行解压缩 三.使用`zip ...

  3. java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解

    Java实现多文件压缩和解压缩代码 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...

  4. Java 的zip压缩和解压缩

    Java 的zip压缩和解压缩 好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代 ...

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

    Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. Zi ...

  6. Nginx的Gzip介绍之压缩和解压缩

    Nginx的Gzip介绍之压缩和解压缩 本节介绍如何配置响应的压缩或解压缩以及如何发送压缩文件. 介绍 压缩响应通常会大大减少传输数据的大小.但是,由于压缩是在运行时发生的,因此还会增加大量的处理开销 ...

  7. Java使用winrar压缩和解压缩文件

    Java使用winrar压缩和解压缩文件 2015-08-17| 发布: | 浏览: 740 |保存PDF Winrar可以使用命令行进行压缩和解压缩,如: 将D:/aa.doc 压缩为:aa.rar ...

  8. java ant解压缩_java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解

    java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解 发布于 2020-4-7| 复制链接 摘记: java ant包中的org.apache.tools.zip实现 ...

  9. 压缩和解压缩——gzip、gunzip、bzip2、bunzip2

    压缩和解压缩--gzip.gunzip.bzip2.bunzip2 所有的文件,都是里边有内容的,内容的写法,是由一些空隙,我们如果磁盘不够了,可以将文件进行压缩,解放磁盘空间. 压缩只能压缩文件,不 ...

  10. Java用ZIP格式压缩和解压缩文件

    转载:java jdk实例宝典 感觉讲的很好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,需要导入该包. 使用zipoutputs ...

最新文章

  1. 如何解决VHDL中参数化赋值:赋全0、全1、全z
  2. 1.3编程基础之算术表达式与顺序执行 20 计算2的幂
  3. [机器学习-实战篇]Imdb数据集情感分析之贝叶斯
  4. Java、JS、OC、Flutter的Base64编码和解码
  5. 动态规划|Dynamic Programming
  6. 【C#】WM 消息大全
  7. jspx格式手机打开_zip格式的文件怎么打开,手机和电脑的操作方法一样吗?
  8. SpringCloud Alibaba实战第三课 Gateway、Sentinel实战
  9. 什么是运行时应用程序自我保护(RASP)Runtime Application Self-Protection
  10. LBS的概念、历史、现状与未来(一)
  11. 关于前端代码埋点数据上报的实现
  12. Python数据结构速成
  13. APICloud使用记录——创建项目
  14. linux+ros2 launch文件开机自启动
  15. 访问网站只有文字,没有图片
  16. IT管理所遇到的问题收集(软件篇)
  17. 彻底卸载 .NET 框架 -- .NET Framework Cleanup Tool
  18. Monte Carlo 与 MCNP、EGS、Geant4的故事
  19. usb转虚拟网卡流程
  20. 用r语言画出y = ax^2 + bx + c,R语言中使用curve函数绘制常用函数曲线

热门文章

  1. 共享单车大败局:谁是凶手,谁在买单?
  2. 常见的java面试题
  3. 免费视频教程!零基础学Python系列(7) - 数据类型之bytes(上)
  4. class.forName
  5. 百度云盘核心功能需求分析
  6. Java Swing(二)按钮点击事件处理ActionListener
  7. Spring分析之IOC原理
  8. 使用pydicom实现Dicom文件读取与CT图像窗宽窗位调整
  9. 联合熵、条件熵、互信息、相对熵、交叉熵的详解
  10. 数据挖掘经典十大算法_条件熵、信息增益介绍