加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java中的deflate算法达成压缩功能

发布时间:2021-11-18 16:44:34 所属栏目:教程 来源:互联网
导读:在文件的传输过程中,为了使大文件能够更加方便快速的传输,一般采用压缩的办法来对文件压缩后再传输,Java中的java.util.zip包中的Deflater和Inflater类为使用者提供了DEFLATE算法的压缩功能,以下是自已编写的压缩和解压缩实现,并以压缩文件内容为例说明,
在文件的传输过程中,为了使大文件能够更加方便快速的传输,一般采用压缩的办法来对文件压缩后再传输,Java中的java.util.zip包中的Deflater和Inflater类为使用者提供了DEFLATE算法的压缩功能,以下是自已编写的压缩和解压缩实现,并以压缩文件内容为例说明,其中涉及的具体方法可查看JDK的API了解说明。
 
/**
    *
    * @param inputByte
    *            待解压缩的字节数组
    * @return 解压缩后的字节数组
    * @throws IOException
    */
    public static byte[] uncompress(byte[] inputByte) throws IOException {
        int len = 0;
        Inflater infl = new Inflater();
        infl.setInput(inputByte);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] outByte = new byte[1024];
        try {
            while (!infl.finished()) {
                // 解压缩并将解压缩后的内容输出到字节输出流bos中
                len = infl.inflate(outByte);
                if (len == 0) {
                    break;
                }
                bos.write(outByte, 0, len);
            }
            infl.end();
        } catch (Exception e) {
            //
        } finally {
            bos.close();
        }
        return bos.toByteArray();
    }
 
    /**
    * 压缩.
    *
    * @param inputByte
    *            待压缩的字节数组
    * @return 压缩后的数据
    * @throws IOException
    */
    public static byte[] compress(byte[] inputByte) throws IOException {
        int len = 0;
        Deflater defl = new Deflater();
        defl.setInput(inputByte);
        defl.finish();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] outputByte = new byte[1024];
        try {
            while (!defl.finished()) {
                // 压缩并将压缩后的内容输出到字节输出流bos中
                len = defl.deflate(outputByte);
                bos.write(outputByte, 0, len);
            }
            defl.end();
        } finally {
            bos.close();
        }
        return bos.toByteArray();
    }
 
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:testdeflate.txt");
            int len = fis.available();
            byte[] b = new byte[len];
            fis.read(b);
            byte[] bd = compress(b);
            // 为了压缩后的内容能够在网络上传输,一般采用Base64编码
            String encodestr = Base64.encodeBase64String(bd);
            byte[] bi = uncompress(Base64.decodeBase64(encodestr));
            FileOutputStream fos = new FileOutputStream("D:testinflate.txt");
            fos.write(bi);
            fos.flush();
            fos.close();
            fis.close();
        } catch (Exception e) {
            //
        }
    }

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读