压缩数据

网页上的信息量是很大的,如果不将数据压缩再回送给浏览器,这样就十分耗费流量,现在我有一些数据要输出给浏览器。

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
        //获取数据长度,输出到浏览器
        resp.getWriter().write("原来数据长度:"+s.getBytes().length+"</br>");
        //相应数据输出到浏览器
        resp.getWriter().write(s);
    }

原来的长度是:64

数据压缩

压缩的原理是什么?我们知道getOutputStream()和getWriter()都是直接把数据输出给浏览器的。现在我要做的就是让数据不直接输出给浏览器,先让我压缩了,再输出给浏览器。java提供了GZIP压缩类给我们。

查看了下API,gzipOutputStream.write()接收的是byte[]类型的,既然是byte[]类型,那么我就给他一个ByteArrayOutputStream,用GZIPOutputStream写数据的时候,是把数据写到ByteArrayOutputStream上的,等会还要把数据取出来,再写给浏览器,于是就不能以匿名内部类的方式给GZIPOutputStream,必须把ByteArrayOutputStream定义出来.

把压缩后的数据取出来,写给浏览器

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        GZIPOutputStream gzipOutputStream= new GZIPOutputStream(byteArrayOutputStream);
        gzipOutputStream.write(s.getBytes());
        //gzipOutputStream有缓冲,把缓冲清了,并顺便关闭流
        gzipOutputStream.close();
        //将压缩的数据取出来
        byte [] bytes = byteArrayOutputStream.toByteArray();
        //获取数据长度,输出到浏览器
        resp.setHeader("Content-Encoding","gzip");
        resp.getOutputStream().write(bytes);
        System.out.println("压缩后的数据长度:"+bytes.length);
    }
    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值