【Java】文本数据的Gzip压缩

文章展示了如何在Java中使用Gzip算法对数据进行压缩和解压缩,特别提及在ACK集群中,Nginx服务器(高优先级延迟敏感型LS)与FFmpeg视频解码应用(低优先级BE)混部的情况。文章探讨了不同混部配置下,Nginx应用的性能表现差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

在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;
	}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端码匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值