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