一、✌实现思想
压缩
> 获取输入流 > 获取压缩相关信息(反射) > 获取输出流 > 流的对拷 > 关闭资源
解压缩
> 校验文件是否可以解压 > 获取输入流 > 获取输出流 > 流的对拷 > 关闭资源
二、✌代码实现
1.✌compress压缩方法
public static void compress(String fileName, String method) throws IOException, ClassNotFoundException { //1、获取输入流 FileInputStream fis = new FileInputStream(new File(fileName)); //2、获取压缩相关信息 Class codecClass = Class.forName(method); CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, new Configuration()); //3、获取输出流 FileOutputStream fos = new FileOutputStream(new File(fileName + codec.getDefaultExtension())); CompressionOutputStream cos = codec.createOutputStream(fos); //4、流的对拷 IOUtils.copyBytes(fis, cos, 1024 * 1024, false); //5、关闭资源 IOUtils.closeStream(cos); IOUtils.closeStream(fos); IOUtils.closeStream(fis); }
2.✌decompress解压方法
public static void decompress(String fileName) throws IOException { //1、校验文件是否可以解压 CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration()); CompressionCodec codec = factory.getCodec(new Path(fileName)); if (codec == null) { System.out.println("不能够解压"); return; } //2、获取输入流 CompressionInputStream cis = codec.createInputStream(new FileInputStream(new File(fileName))); //3、获取输出流 FileOutputStream fos = new FileOutputStream(new File(fileName + ".decoded")); //4、流的对拷 IOUtils.copyBytes(cis, fos, 1024 * 1024, false); //5、关闭资源 IOUtils.closeStream(fos); IOUtils.closeStream(cis); }
、