温馨提示×

如何在InputStream中实现数据的压缩和解压

小樊
87
2024-09-02 22:16:53
栏目: 编程语言

在Java中,可以使用java.util.zip包中的类来实现对InputStream中数据的压缩和解压。以下是一个简单的示例,展示了如何使用GZIP格式进行压缩和解压缩。

首先,需要导入相关的类:

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

接下来,实现压缩和解压缩的方法:

public class CompressionExample {

    public static InputStream compress(InputStream inputStream) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) != -1) {
            gzipOutputStream.write(buffer, 0, len);
        }

        gzipOutputStream.close();
        inputStream.close();

        return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
    }

    public static InputStream decompress(InputStream inputStream) throws IOException {
        GZIPInputStream gzipInputStream = new GZIPInputStream(inputStream);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int len;
        while ((len = gzipInputStream.read(buffer)) != -1) {
            byteArrayOutputStream.write(buffer, 0, len);
        }

        gzipInputStream.close();
        inputStream.close();

        return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
    }
}

这里的compress方法接收一个InputStream,然后使用GZIPOutputStream将其压缩为GZIP格式。decompress方法接收一个GZIP格式的InputStream,然后使用GZIPInputStream将其解压缩。

以下是如何使用这些方法的示例:

public static void main(String[] args) throws IOException {
    // 原始数据
    String originalData = "This is a test string for compression and decompression.";
    InputStream originalInputStream = new ByteArrayInputStream(originalData.getBytes());

    // 压缩数据
    InputStream compressedInputStream = compress(originalInputStream);

    // 解压缩数据
    InputStream decompressedInputStream = decompress(compressedInputStream);

    // 读取解压缩后的数据
    BufferedReader reader = new BufferedReader(new InputStreamReader(decompressedInputStream));
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
}

这个示例首先创建了一个包含原始数据的InputStream,然后使用compress方法将其压缩。接着,使用decompress方法将压缩后的数据解压缩。最后,读取解压缩后的数据并打印出来。

0