Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 357|回复: 0

[JavaIO学习]学习Java压缩技术(一)ZLib

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-28 23:56:13 | 显示全部楼层 |阅读模式
    有关ZLib可参见官方主页 http://www.zlib.net/
    ZLib可以简单的理解为压缩/解压缩算法,它与ZIP、RAR等归档算法有所不同,与bzip2比较接近。

    压缩工具代码如下:
    /**
    * 2009-9-9
    */
    package org.zlex.commons.io;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.zip.Deflater;
    import java.util.zip.Inflater;
    /**
    * ZLib压缩工具
    *
    * @author  <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>  
    * @version 1.0
    * @since 1.0
    */
    public abstract class ZLibUtils {
            /**
             * 压缩
             *
             * @param data
             *            待压缩数据
             * @return byte[] 压缩后的数据
             */
            public static byte[] compress(byte[] data) {
                    byte[] output = new byte[0];
                    Deflater compresser = new Deflater();
                    compresser.reset();
                    compresser.setInput(data);
                    compresser.finish();
                    ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
                    try {
                            byte[] buf = new byte[1024];
                            while (!compresser.finished()) {
                                    int i = compresser.deflate(buf);
                                    bos.write(buf, 0, i);
                            }
                            output = bos.toByteArray();
                    } catch (Exception e) {
                            output = data;
                            e.printStackTrace();
                    } finally {
                            try {
                                    bos.close();
                            } catch (IOException e) {
                                    e.printStackTrace();
                            }
                    }
                    compresser.end();
                    return output;
            }
            /**
             * 解压缩
             *
             * @param data
             *            待压缩的数据
             * @return byte[] 解压缩后的数据
             */
            public static byte[] decompress(byte[] data) {
                    byte[] output = new byte[0];
                    Inflater decompresser = new Inflater();
                    decompresser.reset();
                    decompresser.setInput(data);
                    ByteArrayOutputStream o = new ByteArrayOutputStream(data.length);
                    try {
                            byte[] buf = new byte[1024];
                            while (!decompresser.finished()) {
                                    int i = decompresser.inflate(buf);
                                    o.write(buf, 0, i);
                            }
                            output = o.toByteArray();
                    } catch (Exception e) {
                            output = data;
                            e.printStackTrace();
                    } finally {
                            try {
                                    o.close();
                            } catch (IOException e) {
                                    e.printStackTrace();
                            }
                    }
                    decompresser.end();
                    return output;
            }
    }
                            [/code]
    测试用例代码如下:
    /**
    * 2009-9-9
    */
    package org.zlex.commons.io;
    import static org.junit.Assert.*;
    import org.junit.Test;
    /**
    * ZLib压缩测试用例
    *
    * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>  
    * @version 1.0
    * @since 1.0
    */
    public class ZLibUtilsTest {
            @Test
            public final void test() {
                    String inputStr = "snowolf@zlex.org;dongliang@zlex.org;zlex.dongliang@zlex.org";
                    System.err.println("输入字符串:        " + inputStr);
                    byte[] input = inputStr.getBytes();
                    System.err.println("输入字节长度:        " + input.length);
                    byte[] data = ZLibUtils.compress(input);
                    System.err.println("压缩后字节长度:        " + data.length);
                    byte[] output = ZLibUtils.decompress(data);
                    System.err.println("解压缩后字节长度:        " + output.length);
                    String outputStr = new String(output);
                    System.err.println("输出字符串:        " + outputStr);
                    assertEquals(inputStr, outputStr);
            }
    }
                            [/code]
    输入结果
    输入字符串:        snowolf@zlex.org;dongliang@zlex.org;zlex.dongliang@zlex.org
    输入字节长度:        59
    压缩后字节长度:        39
    解压缩后字节长度:        59
    输出字符串:        snowolf@zlex.org;dongliang@zlex.org;zlex.dongliang@zlex.org
                            [/code]
    ZLib压缩对大字节数据压缩,才能反映出压缩效果。

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/28/235613171.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 04:14 , Processed in 0.353844 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表