提示:字符串压缩和解压缩
文章目录
1.字符串压缩和解压缩
代码如下(示例):
package com.wbr.demo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Base64;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
* 字符串压缩
*/
@Slf4j
public class JavaTestHandler {
@Test
public void run() throws Exception {
// 设置文件路径
String pathDir = "D:\\Users\\lei\\Desktop\\";
// 读取文件内容为字符串
String inputString = FileUtils.readFileToString(new File(pathDir + "max.log"));
// 将字符串转换为字节数组
byte[] input = inputString.getBytes("UTF-8");
// 创建一个字节数组输出流,用于接收压缩后的数据
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
GZIPOutputStream gzipOut = new GZIPOutputStream(outputStream);
// 将数据压缩到输出流中
gzipOut.write(input);
gzipOut.close();
// 获取压缩后的字节数组
byte[] compressed = outputStream.toByteArray();
// 将压缩后的字节数组转换为字符串(使用Base64编码)
String compressedString = Base64.getEncoder().encodeToString(compressed);
// 将压缩后的字符串写入文件
FileUtils.write(new File(pathDir + "after.log"), compressedString);
// 解压缩示例(可选)
byte[] decompressed = decompress(compressed);
String originalString = new String(decompressed, "UTF-8");
// 将解压缩后的字符串写入文件
FileUtils.write(new File(pathDir + "afterXX.log"), originalString);
}
// 解压缩方法
public static byte[] decompress(byte[] compressed) throws IOException {
// 创建一个字节数组输入流,用于读取压缩数据
ByteArrayInputStream inputStream = new ByteArrayInputStream(compressed);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
GZIPInputStream gzipIn = new GZIPInputStream(inputStream);
// 读取压缩数据并写入输出流
byte[] buffer = new byte[1024];
int len;
while ((len = gzipIn.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
gzipIn.close();
outputStream.close();
return outputStream.toByteArray();
}
}
2.压缩后比较
代码如下(示例):
刚开始我是打算用来压缩图片的base64的,后来经过测试,发现文件越大,效果越明显,反而图片base64压缩后的效果没太大提升。