Great one, Stanley! 😎 In Java, working with compressed streams (like ZIP or GZIP) is well-supported — especially for reading/writing data on-the-fly in a compressed format.
Here are the key classes you’ll want to know:
🗜️ Classes for Reading/Writing Compressed Streams
Class | Package | Purpose |
---|---|---|
GZIPInputStream | java.util.zip | Reads data from a GZIP-compressed input stream |
GZIPOutputStream | java.util.zip | Writes data to a stream in GZIP format |
ZipInputStream | java.util.zip | Reads ZIP archive entries sequentially |
ZipOutputStream | java.util.zip | Writes ZIP archive entries |
InflaterInputStream | java.util.zip | Reads data compressed with DEFLATE |
DeflaterOutputStream | java.util.zip | Writes data in DEFLATE format |
JarInputStream | java.util.jar | Reads JAR files (which are ZIP + manifest) |
JarOutputStream | java.util.jar | Writes JAR files |
✅ GZIP Example
import java.io.*;
import java.util.zip.*;
public class GzipExample {
public static void main(String[] args) throws IOException {
// Compress
try (FileOutputStream fos = new FileOutputStream("data.gz");
GZIPOutputStream gzipOut = new GZIPOutputStream(fos);
OutputStreamWriter writer = new OutputStreamWriter(gzipOut)) {
writer.write("Hello, compressed world!");
}
// Decompress
try (FileInputStream fis = new FileInputStream("data.gz");
GZIPInputStream gzipIn = new GZIPInputStream(fis);
InputStreamReader reader = new InputStreamReader(gzipIn);
BufferedReader br = new BufferedReader(reader)) {
System.out.println("Decompressed: " + br.readLine());
}
}
}
✅ ZIP Example (Multiple Entries)
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("archive.zip"))) {
ZipEntry entry = new ZipEntry("hello.txt");
zos.putNextEntry(entry);
zos.write("Hello from ZIP!".getBytes());
zos.closeEntry();
}
🧵 TL;DR
Format | For Reading | For Writing |
---|---|---|
GZIP | GZIPInputStream | GZIPOutputStream |
ZIP | ZipInputStream , JarInputStream | ZipOutputStream , JarOutputStream |
DEFLATE | InflaterInputStream | DeflaterOutputStream |
These classes wrap around InputStream/OutputStream, so you can use them in stream chains like with BufferedReader
, PrintWriter
, etc.