import java.io.*;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.io.IOUtils;import org.apache.hadoop.io.compress.CompressionCodec;import org.apache.hadoop.io.compress.CompressionOutputStream;import org.apache.hadoop.io.compress.GzipCodec;import org.apache.hadoop.util.ReflectionUtils;public class TestBlock2 { public static void main(String[] args) throws Exception {// Configuration conf = new Configuration();// Class codecClass = Class.forName("org.apache.hadoop.io.compress.GzipCodec");// CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, conf); CompressionCodec codec = new GzipCodec(); InputStream in = new FileInputStream(new File("a.txt")); File fileOut = new File("a.txt"+codec.getDefaultExtension()); FileOutputStream outStream = new FileOutputStream(fileOut); CompressionOutputStream out = codec.createOutputStream(outStream); IOUtils.copyBytes(in, out, 4096, false); in.close();// out.close(); outStream.close(); }}
测试该代码的时候,犯了个基础的错误,在流的关闭上没有把最后引用的流关闭。
即 out.close(); 导致的问题就是压缩流 CompressionOutputStream 没有把压缩的内容输出到文件中。
NOTE: 记得关闭相应的流。