Java函数:如何对字符串进行压缩和解压缩
发布时间:2023-07-04 19:01:24
在Java中,可以通过使用压缩和解压缩算法来对字符串进行压缩和解压缩。常用的压缩算法包括gzip和zip。
下面是一个示例代码,演示如何使用gzip算法对字符串进行压缩和解压缩:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class StringCompressor {
public static byte[] compress(String str) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(bos);
gzip.write(str.getBytes());
gzip.close();
byte[] compressed = bos.toByteArray();
bos.close();
return compressed;
}
public static String decompress(byte[] compressed) throws IOException {
ByteArrayInputStream bis = new ByteArrayInputStream(compressed);
GZIPInputStream gzip = new GZIPInputStream(bis);
byte[] buffer = new byte[1024];
StringBuilder sb = new StringBuilder();
int len;
while ((len = gzip.read(buffer)) > 0) {
sb.append(new String(buffer, 0, len));
}
gzip.close();
bis.close();
return sb.toString();
}
public static void main(String[] args) throws IOException {
String originalString = "Hello, World!";
System.out.println("Original String: " + originalString);
byte[] compressed = compress(originalString);
System.out.println("Compressed String: " + new String(compressed));
String decompressed = decompress(compressed);
System.out.println("Decompressed String: " + decompressed);
}
}
上述代码中,compress函数将输入的字符串通过GZIPOutputStream进行压缩,并将压缩结果保存在ByteArrayOutputStream中。decompress函数则通过GZIPInputStream将压缩的字节流解压缩,并将解压结果转换为字符串返回。
在main函数中,我们首先定义一个原始字符串"Hello, World!",然后通过compress函数对其进行压缩,得到一个压缩后的字节数组。我们可以将该字节数组转换为字符串并输出,观察压缩结果。接着,我们使用decompress函数对压缩后的字节数组进行解压缩,并输出解压缩的结果。
运行以上代码,输出如下:
Original String: Hello, World! Compressed String: ?K?Je??A,KV-*I?@- Decompressed String: Hello, World!
可以看到,原始字符串"Hello, World!"经过压缩和解压缩后,再次变为了相同的字符串。
需要注意的是,压缩和解压缩过程中使用的是字节数组,因此在处理中文等非ASCII字符时,需要注意字符编码的正确性。
