java Gzip压缩-base64及其解压缩

该博客提供了一个名为GzipUtil3的Java工具类,实现了字符串和字节数组的GZIP压缩与解压缩功能。方法包括将字符串压缩为GZIP字节数组、从GZIP字节数组解压缩回字符串等。此外,还包含了一个Base64编码与解码的示例,展示了如何将压缩后的字节数组转换为Base64字符串并解码回原始数据。
摘要由CSDN通过智能技术生成
package com.ruoyi.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.codec.binary.StringUtils;

public class GzipUtil3 {
	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) {
			System.out.println(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) {
			System.out.println(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) {
			System.out.println(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";
		String str = "{\"name\":\"张三\",\"sex\":\"1\",\"address\":\"山西原平\"}";
		System.out.println("原长度:" + str.length());
		System.out.println("压缩后字符串:" + GzipUtil3.compress(str).toString());
		System.out.println("解压缩后字符串:" + StringUtils.newStringUtf8(GzipUtil3.uncompress(GzipUtil3.compress(str))));
		System.out.println("解压缩后字符串:" + GzipUtil3.uncompressToString(GzipUtil3.compress(str)));
	
		String encodeStr = Base64.getEncoder().encodeToString(GzipUtil3.compress(str));
		System.out.println("压缩文件转码base64"+encodeStr);
		try {
			byte[] ret = new sun.misc.BASE64Decoder().decodeBuffer(encodeStr);
			System.out.println("转码后"+ret);
			System.out.println("转码后解压缩:" + GzipUtil3.uncompressToString(ret));
			
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值