読者です 読者をやめる 読者になる 読者になる

KZKY memo

自分用メモ.

Java: gzip書込み/読み込み

Bufferingしながら,圧縮ファイル(gzipファイル)を書きこんで,読み込んで見るサンプル.
サイズの大きいオブジェクトや書き込む配列がint size (2^31 - 1)を超えていると,bufferingしないとJVMが落ちる.

前に誰かがやってて,気にになったのでやってみる.
基本はstreamをつなげるだけで,

package edu.kzk.java_samle.basic.io.gzip;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GzipMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String filename = "/home/kzk/tmp/java/gzip.gz";
		try {
			deleteGipFile(filename);
			writeGzipFile(filename);
			readGzipFile(filename);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void readGzipFile(String filename) throws FileNotFoundException, IOException {
		try(BufferedReader br = new BufferedReader(
				new InputStreamReader(
						new GZIPInputStream(
								new BufferedInputStream(
										new FileInputStream(
												new File(filename))))))
				)
				{

			String line = null;
			while((line = br.readLine()) != null){
				System.out.println(line);
			}
				}
	}

	public static void writeGzipFile(String filename) throws FileNotFoundException, IOException {
		try(BufferedWriter bw = new BufferedWriter(
				new OutputStreamWriter(
						new GZIPOutputStream(
								new BufferedOutputStream(
										new FileOutputStream(
												new File(filename))))))
				){
			for (int i = 0; i < 1000; i++) {
				bw.write(String.valueOf(i) + ": " + String.valueOf(Math.random()));
				bw.newLine();
			}
		}
	}

	public static boolean deleteGipFile(String filename) {
		return new File(filename).delete();
	}
}

try-with-resourcesで書いてみた.
以上.