在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
方法将压缩后的数据解压缩。最后,读取解压缩后的数据并打印出来。