package Chapter7;
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.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class compress {
public static void compress(String filePath, String method){
Configuration conf = new Configuration();
FileOutputStream fos = null;
CompressionOutputStream outputStream = null;
FileInputStream fis = null;
//1创建编译码器
//通过反射机制实例化编译码器对象
try {
Class<?> codecClass = Class.forName(method);
CompressionCodec codec = (CompressionCodec) ReflectionUtils.
newInstance(codecClass,conf);
//2.获取压缩的输出字节流
fos = new FileOutputStream(filePath +
codec.getDefaultExtension());
outputStream= codec.createOutputStream(fos);
fis = new FileInputStream(filePath);
/*byte[] buf = new byte[1024];
int ret = 0;
//输入流去读,输出流去写
while ((ret = fis.read(buf)) != -1){
outputStream.write(buf);
}*/
//3.流的复制,写1020个字节
IOUtils.copyBytes(fis,outputStream,1020);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
IOUtils.closeStream(outputStream);
IOUtils.closeStream(fis);
}
}
public static void decompress(String filePath){
Configuration conf = new Configuration();
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
//1.获取编译码器对象
CompressionCodec codec = factory.getCodec(new Path(filePath));
if (codec == null){
System.out.println("No codec found" + filePath);
return;
}
FileInputStream fis = null;
CompressionInputStream inputStream = null;
FileOutputStream fos = null;
try {
//2获取解码的输入字节流
fis = new FileInputStream(filePath);
inputStream = codec.createInputStream(fis);
String newFile = CompressionCodecFactory.removeSuffix(filePath,
codec.getDefaultExtension());
fos = new FileOutputStream(newFile);
//流的复制
IOUtils.copyBytes(inputStream,fos,1020);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
IOUtils.closeStream(inputStream);
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
}
}
public static void main(String[] args) {
// compress("D:/input.txt","org.apache.hadoop.io.compress.BZip2Codec");
}
}
2020-10-07
最新推荐文章于 2025-08-24 22:05:35 发布