欢迎访问宙启技术站
智能推送

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字符时,需要注意字符编码的正确性。