package com.googlecode.mycontainer.commons.util;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import com.googlecode.mycontainer.commons.io.IOUtil;
public class ZipUtil {
public static byte[] gzip(String str, String charset) {
try {
byte[] data = str.getBytes(charset);
return gzip(data);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
public static byte[] gzip(byte[] data) {
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
GZIPOutputStream out = new GZIPOutputStream(bout);
out.write(data);
out.close();
return bout.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static String gunzipString(byte[] gz, String string) {
try {
byte[] data = gunzip(gz);
return new String(data, string);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
private static byte[] gunzip(byte[] gz) {
try {
GZIPInputStream in = new GZIPInputStream(new ByteArrayInputStream(
gz));
byte[] ret = IOUtil.readAll(in);
return ret;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static <T extends ZipProcessor> T process(ZipInputStream in,
T processor) {
try {
ZipEntry entry = in.getNextEntry();
while (entry != null) {
if (entry.getName() != null && entry.getName().length() > 0) {
processor.process(entry, in);
}
in.closeEntry();
entry = in.getNextEntry();
}
return processor;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static <T extends ZipProcessor> T process(URL url, T processor) {
ZipInputStream in = null;
try {
in = new ZipInputStream(new BufferedInputStream(url.openStream()));
return process(in, processor);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
IOUtil.close(in);
}
}
}