在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
方法將壓縮后的數據解壓縮。最后,讀取解壓縮后的數據并打印出來。