• 【Java基础】JDK 自带压缩解压流


    代码如下

    package com.test.java.zip;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    import java.util.zip.ZipOutputStream;
    
    /**
     * @author jrwangxin1 字节数组压缩解压工具
     */
    public class ZipUtil {
        /** 压缩 */
        public static byte[] zip(byte[] source) throws IOException {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream);
            zipOutputStream.putNextEntry(new ZipEntry("0"));
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(zipOutputStream);
            bufferedOutputStream.write(source);
            bufferedOutputStream.close();
            return byteArrayOutputStream.toByteArray();
        }
    
        /** 解压 */
        public static byte[] unzip(byte[] source) throws IOException {
            ZipInputStream zipInputStream = new ZipInputStream(new ByteArrayInputStream(source));
            while (zipInputStream.getNextEntry() != null) {
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                
                byte[] buffer = new byte[4096];
                int i=0;
                while ((i = zipInputStream.read(buffer)) != -1) {
                    byteArrayOutputStream.write(buffer,0,i);
                }
                return byteArrayOutputStream.toByteArray();
            }
            return null;
        }
    
        public static void main(String[] args) throws IOException {
            // 读文件
            String file = "E:/pic.jpg";
            String outFile = "E:/picunzip.jpg";
            BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
            byte[] bytes1 = new byte[bufferedInputStream.available()];
            bufferedInputStream.read(bytes1);
            bufferedInputStream.close();
            System.out.println("压缩前大小: " + bytes1.length);
            // 压缩
            byte[] bytes2 = ZipUtil.zip(bytes1);
            System.out.println("压缩后大小: " + bytes2.length);
            // 解压
            byte[] bytes3 = ZipUtil.unzip(bytes2);
            System.out.println("unzip解压后大小: " + bytes3.length);
    
            // 输出到文件以便验证
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(outFile));
            bufferedOutputStream.write(bytes3);
            bufferedOutputStream.close();
        }
    }
  • 相关阅读:
    javascript 中的暗物质 闭包
    关于使用 jBox 对话框的提交问题
    Orchard 的项目结构解决方案文件夹的原理与使用
    翻译:创建 Windows8 应用 Part I: Hello, world!
    翻译:FireBug 1.10 新特性
    SQL数据库设计经验
    我的女孩
    在WINDOWS下安装MRTG全攻略网络流量监控
    ASP实用函数库
    DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
  • 原文地址:https://www.cnblogs.com/heben/p/8294966.html
Copyright © 2020-2023  润新知