content: /*
   * Created by LuaView.
   * Copyright (c) 2017, Alibaba Group. All rights reserved.
   *
   * This source code is licensed under the MIT.
   * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
   */
  
  package com.taobao.luaview.util;
  
  import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.util.zip.GZIPInputStream;
  import java.util.zip.GZIPOutputStream;
  
  /**
   * Zip操作
   *
   * @author song
   * @date 15/11/9
   */
  public class ZipUtil {
      private static final int BUFFER_SIZE = 1024 * 32;
  
      /**
       * 将原始数据压缩到zip中
       *
       * @param rawData
       * @return
       */
      public static byte[] zip(final byte[] rawData) {
          ByteArrayOutputStream os = null;
          GZIPOutputStream gos = null;
          try {
              os = new ByteArrayOutputStream(rawData.length);
              gos = new GZIPOutputStream(os);
              gos.write(rawData);
              byte[] compressed = os.toByteArray();
              return compressed;
          } catch (Exception e) {
              e.printStackTrace();
              return null;
          } finally {
              try {
                  if (gos != null) {
                      gos.close();
                  }
                  if (os != null) {
                      os.close();
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
  
      /**
       * 将zip过的数据解压缩出来
       *
       * @param compressed
       * @return
       */
      public static byte[] unzip(byte[] compressed) {
          ByteArrayInputStream is = null;
          GZIPInputStream gis = null;
          ByteArrayOutputStream out = null;
          try {
              is = new ByteArrayInputStream(compressed);
              gis = new GZIPInputStream(is, BUFFER_SIZE);
              out = new ByteArrayOutputStream();
              byte[] data = new byte[BUFFER_SIZE];
              int bytesRead;
              while ((bytesRead = gis.read(data)) != -1) {
                  out.write(data, 0, bytesRead);
              }
              out.flush();
              return out.toByteArray();
          } catch (Exception e) {
              e.printStackTrace();
              return null;
          } finally {
              try {
                  if (gis != null) {
                      gis.close();
                  }
                  if (is != null) {
                      is.close();
                  }
                  if (out != null) {
                      out.close();
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
  
      }
  }
  