2020-10-07

    科技2024-06-02  71

    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"); } }
    Processed: 0.014, SQL: 8