大数据培训压缩实操案例数据流的压缩和解压缩

发布时间:2020年10月04日作者:atguigu浏览次数:819

压缩实操案例

数据流的压缩和解压缩

CompressionCodec有两个方法可以用于轻松地压缩或解压缩髅如据。
要想对正在被写入一个输出流的数据进行压缩,我们可以使用createOutputStream(OutputStreamout)方法创建一个ompressionOutputStream,将
其以压宿格式写入底层的流。
相反,要想对从输入流读取而来的数据进行解压缩,则调用
createInputStream(InputStreamin)函数,从而获得一个CompressionInputStream,从
而从底层的流读取未压宿的数据。

测试一下如下压缩方式:

表4-11

DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec

package com.atguigu.mapreduce.compress;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

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;

public class TestCompress {

   public static void main(String[] args) throws Exception {

   compress(“e:/hello.txt”,”org.apache.hadoop.io.compress.BZip2Codec”);

//    decompress(“e:/hello.txt.bz2”);

   }

   // 1、压缩

   private static void compress(String filename, String method) throws Exception {

      // (1)获取输入流

      FileInputStream fis = new FileInputStream(new File(filename));

      Class codecClass = Class.forName(method);

      CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, new Configuration());

      // (2)获取输出流

      FileOutputStream fos = new FileOutputStream(new File(filename + codec.getDefaultExtension()));

      CompressionOutputStream cos = codec.createOutputStream(fos);

      // (3)流的对拷

      IOUtils.copyBytes(fis, cos, 1024*1024*5, false);

      // (4)关闭资源

      cos.close();

      fos.close();

fis.close();

   }

   // 2、解压缩

   private static void decompress(String filename) throws FileNotFoundException, IOException {

      // (0)校验是否能解压缩

      CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());

      CompressionCodec codec = factory.getCodec(new Path(filename));

      if (codec == null) {

          System.out.println(“cannot find codec for file ” + filename);

          return;

      }

      // (1)获取输入流

      CompressionInputStream cis = codec.createInputStream(new FileInputStream(new File(filename)));

      // (2)获取输出流

      FileOutputStream fos = new FileOutputStream(new File(filename + “.decoded”));

      // (3)流的对拷

      IOUtils.copyBytes(cis, fos, 1024*1024*5, false);

      // (4)关闭资源

      cis.close();

      fos.close();

   }

}

想要了解跟多关于大数据培训课程内容欢迎关注尚硅谷大数据培训,尚硅谷除了这些技术文章外还有免费的高质量大数据培训课程视频供广大学员下载学习


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦3层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)

西安市雁塔区和发智能大厦B座3层(西安校区)

成都市成华区北辰星拱青创园综合楼3层(成都校区)