Java : GZIPOutputStream (ZIP) - API使用例
GZIPOutputStream (Java SE 19 & JDK 19) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
GZIP は Linux でよく使われる圧縮形式です。
GZIPOutputStream クラスを使うと、GZIP 圧縮形式でデータを出力できます。
// --------
// 圧縮
final var out = new ByteArrayOutputStream();
try (final var gos = new GZIPOutputStream(out)) {
gos.write("aaaaa".getBytes());
gos.write("ZZZZZ".getBytes());
}
final var compressed = out.toByteArray();
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, 75, 76, 4,
// -126, 40, 16, 0, 0, -86, 55, 77, 24, 10, 0, 0, 0]
System.out.println(Arrays.toString(compressed));
// --------
// 解凍
try (final var gis = new GZIPInputStream(new ByteArrayInputStream(compressed))) {
final var uncompressed = gis.readAllBytes();
// [97, 97, 97, 97, 97, 90, 90, 90, 90, 90]
System.out.println(Arrays.toString(uncompressed));
// aaaaaZZZZZ
System.out.println(new String(uncompressed));
}
フィールド
protected CRC32 crc
protectedです。
独自にサブクラスを作ることは少ないと思いますので、コード例は割愛します。
DeflaterOutputStreamで宣言されたフィールド
buf, def
「Java API 使用例 : DeflaterOutputStream」をご参照ください。
FilterOutputStreamで宣言されたフィールド
out
「Java API 使用例 : FilterOutputStream」をご参照ください。
コンストラクタ
GZIPOutputStream (OutputStream out)
final var input = "aaaaaaaaaa".getBytes();
// [97, 97, 97, 97, 97, 97, 97, 97, 97, 97]
System.out.println(Arrays.toString(input));
final var out = new ByteArrayOutputStream();
try (final var gos = new GZIPOutputStream(out)) {
gos.write(input);
}
final var compressed = out.toByteArray();
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, 75, 76,
// -124, 1, 0, -16, -51, 17, 76, 10, 0, 0, 0]
System.out.println(Arrays.toString(compressed));
GZIPOutputStream (OutputStream out, boolean syncFlush)
final var out = new ByteArrayOutputStream();
try (final var gos = new GZIPOutputStream(
new BufferedOutputStream(out), true)) {
gos.write("aaa".getBytes());
// []
System.out.println(Arrays.toString(out.toByteArray()));
gos.flush();
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, 74, 76, 76, 4, 0, 0, 0, -1, -1]
System.out.println(Arrays.toString(out.toByteArray()));
}
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, 74, 76, 76, 4,
// 0, 0, 0, -1, -1, 3, 0, 45, 115, 7, -16, 3, 0, 0, 0]
System.out.println(Arrays.toString(out.toByteArray()));
final var out = new ByteArrayOutputStream();
try (final var gos = new GZIPOutputStream(
new BufferedOutputStream(out), false)) {
gos.write("aaa".getBytes());
// []
System.out.println(Arrays.toString(out.toByteArray()));
gos.flush();
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1]
System.out.println(Arrays.toString(out.toByteArray()));
}
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, 75, 76, 76, 4,
// 0, 45, 115, 7, -16, 3, 0, 0, 0]
System.out.println(Arrays.toString(out.toByteArray()));
GZIPOutputStream (OutputStream out, int size)
out パラメータについては GZIPOutputStream(OutputStream out) の使用例をご参照ください。
class MyOutputStream extends GZIPOutputStream {
public MyOutputStream(OutputStream out) throws IOException {
super(out);
}
public MyOutputStream(OutputStream out, int size) throws IOException {
super(out, size);
}
int getSize() {
return buf.length;
}
}
try (final var os = new MyOutputStream(new ByteArrayOutputStream())) {
System.out.println(os.getSize()); // 512
}
try (final var os = new MyOutputStream(new ByteArrayOutputStream(), 1024)) {
System.out.println(os.getSize()); // 1024
}
GZIPOutputStream (OutputStream out, int size, boolean syncFlush)
out, syncFlush パラメータについては GZIPOutputStream(OutputStream out, boolean syncFlush) の使用例をご参照ください。
size パラメータについては GZIPOutputStream(OutputStream out, int size) の使用例をご参照ください。
メソッド
void finish ()
final var out = new ByteArrayOutputStream();
try (final var gos = new GZIPOutputStream(out)) {
gos.write("aaaaa".getBytes());
gos.finish();
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, 75,
// 76, 4, 2, 0, -71, -109, -84, -18, 5,
// 0, 0, 0]
System.out.println(Arrays.toString(out.toByteArray()));
// ストリームはまだ閉じられていません。
out.write(1);
out.write(2);
out.write(3);
out.write(4);
}
final var compressed = out.toByteArray();
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, 75,
// 76, 4, 2, 0, -71, -109, -84, -18, 5,
// 0, 0, 0, 1, 2, 3, 4]
System.out.println(Arrays.toString(compressed));
void write (byte[] buf, int off, int len)
final byte[] input = {10, 20, 30, 40, 50};
System.out.println(Arrays.toString(input)); // [10, 20, 30, 40, 50]
{
final var out = new ByteArrayOutputStream();
try (final var gos = new GZIPOutputStream(out)) {
gos.write(input, 0, 5);
}
final var compressed = out.toByteArray();
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, -29, 18,
// -111, -45, 48, 2, 0, 36, 94, -37, -48, 5, 0, 0, 0]
System.out.println(Arrays.toString(compressed));
try (final var gis = new GZIPInputStream(new ByteArrayInputStream(compressed))) {
final var uncompressed = gis.readAllBytes();
// [10, 20, 30, 40, 50]
System.out.println(Arrays.toString(uncompressed));
}
}
{
final var out = new ByteArrayOutputStream();
try (final var gos = new GZIPOutputStream(out)) {
gos.write(input, 1, 3);
}
final var compressed = out.toByteArray();
// [31, -117, 8, 0, 0, 0, 0, 0, 0, -1, 19, -111,
// -45, 0, 0, -101, 69, -102, 5, 3, 0, 0, 0]
System.out.println(Arrays.toString(compressed));
try (final var gis = new GZIPInputStream(new ByteArrayInputStream(compressed))) {
final var uncompressed = gis.readAllBytes();
// [20, 30, 40]
System.out.println(Arrays.toString(uncompressed));
}
}
DeflaterOutputStreamで宣言されたメソッド
close, deflate, flush, write
「Java API 使用例 : DeflaterOutputStream」をご参照ください。
FilterOutputStreamで宣言されたメソッド
write
「Java API 使用例 : FilterOutputStream」をご参照ください。
OutputStreamで宣言されたメソッド
nullOutputStream
「Java API 使用例 : OutputStream」をご参照ください。