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: 记得关闭相应的流。