【Java】文本数据的Gzip压缩

简介

在Java中,可以使用Gzip压缩算法对数据进行压缩和解压缩。Gzip算法是一种常见的无损压缩算法,可以将数据压缩为较小的字节数,从而节省网络带宽和存储空间等资源。

代码

package cn.com.codingce;

import com.alibaba.nacos.client.identify.Base64;

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

public class Test {
    
    
	public static void main(String[] args) throws IOException {
    
    
		String input = "在ACK集群中的机器运行Nginx服务器应用作为在线服务,与视频解码应用FFmpeg混部。其中,标识Nginx Pod的QoS等级为高优先级延迟敏感型LS(Latency Sensitive),标识FFmpeg Pod的QoS等级为低优先级BE(Best Effort)。本文将对比在不同混部配置下,Nginx应用表现的性能差异。在ACK集群中的机器运行Nginx服务器应用作为在线服务,与视频解码应用FFmpeg混部。其中,标识Nginx Pod的QoS等级为高优先级延迟敏感型LS(Latency Sensitive),标识FFmpeg Pod的QoS等级为低优先级BE(Best Effort)。本文将对比在不同混部配置下,Nginx应用表现的性能差异。在ACK集群中的机器运行Nginx服务器应用作为在线服务,与视频解码应用FFmpeg混部。其中,标识Nginx Pod的QoS等级为高优先级延迟敏感型LS(Latency Sensitive),标识FFmpeg Pod的QoS等级为低优先级BE(Best Effort)。本文将对比在不同混部配置下,Nginx应用表现的性能差异。在ACK集群中的机器运行Nginx服务器应用作为在线服务,与视频解码应用FFmpeg混部。其中,标识Nginx Pod的QoS等级为高优先级延迟敏感型LS(Latency Sensitive),标识FFmpeg Pod的QoS等级为低优先级BE(Best Effort)。本文将对比在不同混部配置下,Nginx应用表现的性能差异。在ACK集群中的机器运行Nginx服务器应用作为在线服务,与视频解码应用FFmpeg混部。其中,标识Nginx Pod的QoS等级为高优先级延迟敏感型LS(Latency Sensitive),标识FFmpeg Pod的QoS等级为低优先级BE(Best Effort)。本文将对比在不同混部配置下,Nginx应用表现的性能差异。";

		System.out.println(input);
		System.out.println(input.substring(0, 10));
		System.out.println(gzip(input));
		System.out.println(ungzip(gzip(input)));
	}

	/**
	 * 使用 gzip 进行压缩.
	 *
	 * @param str 压缩前的文本
	 * @return 压缩后的文本(BASE64 编码)
	 * @throws IOException 如果解压异常
	 */
	public static String gzip(final String str) throws IOException {
    
    
		if (str == null || "".equals(str)) {
    
    
			return str;
		}

		String ret = null;

		byte[] compressed;
		ByteArrayOutputStream out = null;
		GZIPOutputStream zout = null;
		try {
    
    
			out = new ByteArrayOutputStream();
			zout = new GZIPOutputStream(out);
			zout.write(str.getBytes());
			zout.close();
			compressed = out.toByteArray();
			ret = new String(Base64.encodeBase64(compressed), "UTF-8");
		} finally {
    
    
			if (out != null) {
    
    
				try {
    
    
					out.close();
				} catch (final IOException e) {
    
    
					e.printStackTrace();
				}
			}
		}

		return ret;
	}

	/**
	 * 使用 gzip 进行解压缩.
	 *
	 * @param compressedStr 压缩后的文本(BASE64 编码)
	 * @return 解压后的文本
	 * @throws IOException 如果解压异常
	 */
	public static String ungzip(final String compressedStr) throws IOException {
    
    
		if (null == compressedStr || "".equals(compressedStr)) {
    
    
			return compressedStr;
		}

		String ret = null;

		ByteArrayOutputStream out = null;
		ByteArrayInputStream in = null;
		GZIPInputStream zin = null;
		try {
    
    
			final byte[] compressed = Base64.decodeBase64(compressedStr.getBytes());
			out = new ByteArrayOutputStream();
			in = new ByteArrayInputStream(compressed);
			zin = new GZIPInputStream(in);
			final byte[] buffer = new byte[1024];
			int offset = -1;
			while ((offset = zin.read(buffer)) != -1) {
    
    
				out.write(buffer, 0, offset);
			}

			ret = out.toString("UTF-8");
		} finally {
    
    
			if (zin != null) {
    
    
				try {
    
    
					zin.close();
				} catch (final IOException e) {
    
    
					e.printStackTrace();
				}
			}
			if (in != null) {
    
    
				try {
    
    
					in.close();
				} catch (final IOException e) {
    
    
					e.printStackTrace();
				}
			}
			if (out != null) {
    
    
				try {
    
    
					out.close();
				} catch (final IOException e) {
    
    
					e.printStackTrace();
				}
			}
		}

		return ret;
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_43874301/article/details/130966074