在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 = "https://www.yisu.com/ask/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
方法将压缩后的数据解压缩。最后,读取解压缩后的数据并打印出来。