package com.bigdata.hdfs.compress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.*;
import org.apache.hadoop.util.ReflectionUtils;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* Created by daoyao
* 測試壓縮
*/
public class TestCompress {
@Test
public void deflateCompress()throws Exception {
Class[] zipClasses = {
// DeflateCodec.class,
GzipCodec.class,
// BZip2Codec.class,
// Lz4Codec.class,
// SnappyCodec.class,
};
for(Class c : zipClasses){
unzip(c);
}
}
// 解壓縮
private void unzip(Class codecClass)throws Exception{
long start = System.currentTimeMillis();
// 通過反射執行個體化對象 壓縮的編解碼器
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass,new Configuration());
// 建立檔案輸出流, 得到預設擴充名
FileInputStream fis = new FileInputStream("e:/BigTest/2019/大資料" + codec.getDefaultExtension());
// 得到壓縮流
CompressionInputStream zipIn = codec.createInputStream(fis);
IOUtils.copyBytes(zipIn,new FileOutputStream("e:/BigTest/2019/大資料" + ".mp4"),1024);
zipIn.close();
System.out.println(codecClass.getSimpleName() + " : " + (System.currentTimeMillis() - start));
}
// 壓縮檔案
private void zip(Class codecClass)throws Exception{
long start = System.currentTimeMillis();
// 通過反射執行個體化對象 壓縮的編解碼器
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass,new Configuration());
// 建立檔案輸出流, 得到預設擴充名
FileOutputStream fos = new FileOutputStream("e:/BigTest/2019/大資料" + codec.getDefaultExtension());
// 得到壓縮流
CompressionOutputStream zipOut = codec.createOutputStream(fos);
IOUtils.copyBytes(new FileInputStream("e:/BigTest/2019/大資料.mp4"),zipOut,1024);
zipOut.close();
System.out.println(codecClass.getSimpleName() + " : " + (System.currentTimeMillis() - start));
}
}
對比試驗結果: