工具类:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class CompressionUtils {
public static class Zip {
public static byte[] compress(byte[] data) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(output);
ZipEntry zipEntry = new ZipEntry("zip");
zipEntry.setSize(data.length);
zip.putNextEntry(zipEntry);
zip.write(data);
zip.flush();
zip.closeEntry();
zip.close();
byte[] compressed = output.toByteArray();
output.close();
return compressed;
}
public static byte[] decompress(byte[] data) throws IOException {
ByteArrayInputStream input = new ByteArrayInputStream(data);
ZipInputStream zip = new ZipInputStream(input);
byte[] decompressed = null;
if (zip.getNextEntry() != null) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 1];
for (int length = zip.read(buffer); length > 0; length = zip.read(buffer))
out.write(buffer, 0, length);
out.flush();
decompressed = out.toByteArray();
out.close();
}
zip.close();
input.close();
return decompressed;
}
}
public static class GZip {
public static byte[] compress(byte[] data) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(output);
gzip.write(data);
gzip.flush();
gzip.close();
byte[] compressed = output.toByteArray();
output.close();
return compressed;
}
public static byte[] decompress(byte[] data) throws IOException {
ByteArrayInputStream input = new ByteArrayInputStream(data);
GZIPInputStream gzip = new GZIPInputStream(input);
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 1];
for (int length = gzip.read(buffer); length > 0; length = gzip.read(buffer))
output.write(buffer, 0, length);
output.flush();
byte[] decompressed = output.toByteArray();
output.close();
gzip.close();
input.close();
return decompressed;
}
}
}
Zip 测试类:
import java.io.IOException;
import com.mk.util.CompressionUtils;
import com.mk.util.ImageIOUtils;
public class ZipTests {
public static void main(String[] args) throws IOException {
byte[] data = ImageIOUtils.read("E:/PrtSc/1/starry-sky.jpg"); // Read from
System.out.println("压缩之前的大小:" + data.length + " 字节");
byte[] compressed = CompressionUtils.Zip.compress(data);
System.out.println("压缩之后的大小:" + compressed.length + " 字节");
byte[] decompressed = CompressionUtils.Zip.decompress(compressed);
System.out.println("解压之后的大小:" + decompressed.length + " 字节");
ImageIOUtils.write(decompressed, "E:/PrtSc/1/starry-sky-copy.jpg"); // Write to
}
}
提示:用于读取图片的
ImageIOUtils
工具类
GZip 测试类:
import java.io.IOException;
import com.mk.util.CompressionUtils;
import com.mk.util.ImageIOUtils;
public class GZipTests {
public static void main(String[] args) throws IOException {
byte[] data = ImageIOUtils.read("E:/PrtSc/1/starry-sky.jpg"); // Read from
System.out.println("压缩之前的大小:" + data.length + " 字节");
byte[] compressed = CompressionUtils.GZip.compress(data);
System.out.println("压缩之后的大小:" + compressed.length + " 字节");
byte[] decompressed = CompressionUtils.GZip.decompress(compressed);
System.out.println("解压之后的大小:" + decompressed.length + " 字节");
ImageIOUtils.write(decompressed, "E:/PrtSc/1/starry-sky-copy.jpg"); // Write to
}
}