package CompressionApp;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;
import org.apache.hadoop.io.compress.CompressionInputStream;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.util.ReflectionUtils;
import java.io.*;
public class compressApp {
public static void main(String[] args) throws Exception{
//压缩
compression("data/access.log","org.apache.hadoop.io.compress.BZip2Codec");
//解压
decompression("data/access.log.bz2") ;
}
public static void compression(String path,String method) throws IOException, ClassNotFoundException {
FileInputStream path1 = new FileInputStream(new File(path));
Class<?> aClass = Class.forName(method) ;
CompressionCodec code = (CompressionCodec) ReflectionUtils.newInstance(aClass, new Configuration());
FileOutputStream fos = new FileOutputStream(new File(path + code.getDefaultExtension()));
CompressionOutputStream outputStream = code.createOutputStream(fos);
IOUtils.copyBytes(path1,outputStream,1024);
path1.close();
outputStream.close();
fos.close();
}
public static void decompression(String path) throws IOException {
CompressionCodecFactory Factory = new CompressionCodecFactory(new Configuration());
CompressionCodec codec = Factory.getCodec(new Path(path));
if(codec == null){
System.out.println("没有对应的压缩格式");
return;
}
CompressionInputStream inputStream = codec.createInputStream(new FileInputStream(new File(path)));
FileOutputStream fileOutputStream = new FileOutputStream(new File(path + "jieya"));
IOUtils.copyBytes(inputStream,fileOutputStream,1024,false);
fileOutputStream.close();
inputStream.close();
}
}