`
zxl_ong
  • 浏览: 128548 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

GZIP

阅读更多
第一种:返回字节数组
	// 压缩
	  public static byte[] compress(String str) throws IOException {
		  Log.i(TAG,"--- compress() start ---");
		  
		  if (str == null || str.length() == 0) {
		      return null;
		  }
		  ByteArrayOutputStream out = new ByteArrayOutputStream();
		  GZIPOutputStream gzip = new GZIPOutputStream(out);
		  gzip.write(str.getBytes("UTF-8"));
		  gzip.close();
		 
		  Log.i(TAG,"--- compress() end ---");
		  return out.toByteArray();
	  }

     // 解压缩
     public static String decompress(InputStream is) throws IOException {
		  Log.i(TAG,"--- decompress() start ---");
		  
		  ByteArrayOutputStream out = new ByteArrayOutputStream();
		  GZIPInputStream gunzip = new GZIPInputStream(is);
		  byte[] buffer = new byte[BUFFER_SIZE];
		  int n;
		  while ((n = gunzip.read(buffer)) >= 0) {
			  out.write(buffer, 0, n);
		  }
    
		  Log.i(TAG,"--- decompress() end ---");
		  return out.toString("UTF-8");
	  }

          //解压缩的出来的文件如果是文本文件的话,还可以一行一行的处理
 public static void decompress(InputStream is)
	throws Exception {
		GZIPInputStream gis = new GZIPInputStream(is);
		BufferedReader reader = new BufferedReader(new InputStreamReader(gis,"GBK"));
		try {
            String line;
            while((line = reader.readLine()) != null) {
            	//处理每行数据
            }
        } finally {
            reader.close();
            gis.close();
        }
	}



第二种:返回字符串
1、使用ISO-8859-1作为中介编码,可以保证准确还原数据
2、字符编码确定时,可以在uncompress方法最后一句中显式指定编码
	public static String compress(String str) {
		byte[] output = new byte[10000];
		Deflater compresser = new Deflater();
		compresser.setInput(str.getBytes());
		compresser.finish();
		
		int compressDataLength = compresser.deflate(output);
		String s = null;
		try {
			s = new String(output, 0, compressDataLength, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return s;
	}	  

        public static String decompress(String str) throws IOException {
	    if (str == null || str.length() == 0) {
	      return str;
	    }
	    ByteArrayOutputStream out = new ByteArrayOutputStream();
	    ByteArrayInputStream in = new ByteArrayInputStream(str
	        .getBytes("ISO-8859-1"));
	    GZIPInputStream gunzip = new GZIPInputStream(in);
	    byte[] buffer = new byte[1024];
	    int n;
	    while ((n = gunzip.read(buffer)) >= 0) {
	      out.write(buffer, 0, n);
	    }
	    // toString()使用平台默认编码,也可以显式的指定如toString("GBK")
	    return out.toString();
	  }


三、如下是从一个网站上偷来的
package org.zlex.commons.io;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
 * GZIP工具
 * 
 * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
 * @since 1.0
 */
public abstract class GZipUtils {
	public static final int BUFFER = 1024;
	public static final String EXT = ".gz";
	/**
	 * 数据压缩
	 * 
	 * @param data
	 * @return
	 * @throws Exception
	 */
	public static byte[] compress(byte[] data) throws Exception {
		ByteArrayInputStream bais = new ByteArrayInputStream(data);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		// 压缩
		compress(bais, baos);
		byte[] output = baos.toByteArray();
		baos.flush();
		baos.close();
		bais.close();
		return output;
	}
	/**
	 * 文件压缩
	 * 
	 * @param file
	 * @throws Exception
	 */
	public static void compress(File file) throws Exception {
		compress(file, true);
	}
	/**
	 * 文件压缩
	 * 
	 * @param file
	 * @param delete
	 *            是否删除原始文件
	 * @throws Exception
	 */
	public static void compress(File file, boolean delete) throws Exception {
		FileInputStream fis = new FileInputStream(file);
		FileOutputStream fos = new FileOutputStream(file.getPath() + EXT);
		compress(fis, fos);
		fis.close();
		fos.flush();
		fos.close();
		if (delete) {
			file.delete();
		}
	}
	/**
	 * 数据压缩
	 * 
	 * @param is
	 * @param os
	 * @throws Exception
	 */
	public static void compress(InputStream is, OutputStream os)
			throws Exception {
		GZIPOutputStream gos = new GZIPOutputStream(os);
		int count;
		byte data[] = new byte[BUFFER];
		while ((count = is.read(data, 0, BUFFER)) != -1) {
			gos.write(data, 0, count);
		}
		gos.finish();
		gos.flush();
		gos.close();
	}
	/**
	 * 文件压缩
	 * 
	 * @param path
	 * @throws Exception
	 */
	public static void compress(String path) throws Exception {
		compress(path, true);
	}
	/**
	 * 文件压缩
	 * 
	 * @param path
	 * @param delete
	 *            是否删除原始文件
	 * @throws Exception
	 */
	public static void compress(String path, boolean delete) throws Exception {
		File file = new File(path);
		compress(file, delete);
	}
	/**
	 * 数据解压缩
	 * 
	 * @param data
	 * @return
	 * @throws Exception
	 */
	public static byte[] decompress(byte[] data) throws Exception {
		ByteArrayInputStream bais = new ByteArrayInputStream(data);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		// 解压缩
		decompress(bais, baos);
		data = baos.toByteArray();
		baos.flush();
		baos.close();
		bais.close();
		return data;
	}
	/**
	 * 文件解压缩
	 * 
	 * @param file
	 * @throws Exception
	 */
	public static void decompress(File file) throws Exception {
		decompress(file, true);
	}
	/**
	 * 文件解压缩
	 * 
	 * @param file
	 * @param delete
	 *            是否删除原始文件
	 * @throws Exception
	 */
	public static void decompress(File file, boolean delete) throws Exception {
		FileInputStream fis = new FileInputStream(file);
		FileOutputStream fos = new FileOutputStream(file.getPath().replace(EXT,
				""));
		decompress(fis, fos);
		fis.close();
		fos.flush();
		fos.close();
		if (delete) {
			file.delete();
		}
	}
	/**
	 * 数据解压缩
	 * 
	 * @param is
	 * @param os
	 * @throws Exception
	 */
	public static void decompress(InputStream is, OutputStream os)
			throws Exception {
		GZIPInputStream gis = new GZIPInputStream(is);
		int count;
		byte data[] = new byte[BUFFER];
		while ((count = gis.read(data, 0, BUFFER)) != -1) {
			os.write(data, 0, count);
		}
		gis.close();
	}
	/**
	 * 文件解压缩
	 * 
	 * @param path
	 * @throws Exception
	 */
	public static void decompress(String path) throws Exception {
		decompress(path, true);
	}
	/**
	 * 文件解压缩
	 * 
	 * @param path
	 * @param delete
	 *            是否删除原始文件
	 * @throws Exception
	 */
	public static void decompress(String path, boolean delete) throws Exception {
		File file = new File(path);
		decompress(file, delete);
	}
}
分享到:
评论

相关推荐

    gzip.rar_C gzip源码_c语言gzip_gzip压缩_gzip解压_poetryfem

    gzip是Linux环境中广泛使用的文件压缩工具,其源代码主要由C语言编写。本文将深入探讨gzip的原理、C语言实现细节以及如何进行gzip压缩和解压缩。 首先,gzip基于著名的DEFLATE算法,该算法结合了LZ77(一种字典压缩...

    gzip源码 (可离线安装gzip)

    这个源码包"gzip源码 (可离线安装gzip)"提供了一种在没有网络连接的情况下安装gzip的可能性,这对于那些需要在隔离环境或者没有网络的服务器上部署gzip的情况非常有用。下面将详细介绍gzip工具以及如何利用提供的...

    STM32移植gzip

    STM32移植gzip涉及到的是在微控制器环境中实现数据压缩与解压缩的一种技术。STM32是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M内核的微控制器系列,而gzip是一种广泛使用的数据压缩算法,常用于在...

    gzip-1.8.tar.gz

    gzip-1.8.tar.gz 是一个包含gzip 1.8版本源代码的压缩文件,它主要用于在各种操作系统,包括但不限于海思3556V200这样的平台,进行软件开发时的压缩和解压缩操作。gzip是一款广泛使用的命令行工具,基于GNU项目,...

    GZIP_gzip_

    GZIP是一种广泛使用的无损数据压缩算法,尤其在IT领域中扮演着重要角色。这个压缩格式基于DEFLATE算法,该算法结合了LZ77(Lempel-Ziv)编码和霍夫曼编码,旨在高效地减小文件大小,同时能够完全恢复原始数据。 ...

    Delphi解压gzip字符串例程

    `gzip`则是一种广泛使用的数据压缩格式,常用于网络传输,以减少数据传输量,提高效率。本示例主要涉及如何在Delphi中处理gzip压缩的字符串,包括解压和压缩。 在描述中提到的"完整的库文件代码"可能是指`...

    利用JAVASCRIPT即你想那个GZIP压缩与解压缩

    标题中的“利用JAVASCRIPT实现GZIP压缩与解压缩”指的是在JavaScript环境中,我们可以使用原生或第三方库来处理GZIP格式的压缩和解压缩操作。GZIP是一种广泛使用的数据压缩格式,常用于减少网络传输的数据量,尤其是...

    gzip的Windows版 gzip.exe

    gzip的Windows版,展开由gzip压缩的文件。gzip压缩文件有gzip.exe gzip.doc Readme Copying 四个子文件夹。 gzip 的Window版的gzip, 也就是gzip124xN.exe. 下载 gzip 的Window版的gzip, 也就是gzip124xN.exe。

    gzip 静态解压缩库c++ builder 2007版本,源代码

    gzip是一种广泛使用的数据压缩算法,尤其在网络传输和存储大量数据时。它的全称是GNU Zip,最初由Jean-loup Gailly和Mark Adler开发,并且是开源的。gzip不仅可以用于单个文件的压缩,还可以与Unix-like系统的管道...

    使用libcurl获取经过gzip压缩的网页文件

    在互联网通信中,为了减少数据传输量,提升网络性能,许多服务器会将网页内容通过gzip进行压缩后再发送给客户端。libcurl是一个强大的URL传输库,它支持多种协议,包括HTTP,能够处理经gzip压缩的数据。本文将深入...

    window版的gunzip+gzip工具,实现文件压缩和解压缩工具

    这里我们关注的是在Windows环境下使用的gunzip和gzip工具,它们是Unix/Linux系统中广泛使用的压缩命令行工具的Windows版本。下面将详细介绍这两个工具以及它们在MySQL数据处理中的应用。 gzip是一款开源的压缩程序...

    java实现gzip ajax请求gzip压缩

    在IT行业中,gzip是一种广泛使用的数据压缩算法,尤其在Web服务中,用于减少网络传输的数据量,从而提高页面加载速度和降低服务器带宽消耗。Java作为后端开发的重要语言,支持处理gzip压缩,而Ajax(Asynchronous ...

    pako gzip 压缩和解压缩(支持中文).rar

    pako是一个高性能的JavaScript库,它实现了多种压缩和解压缩算法,包括gzip。本项目着重介绍了如何使用pako库处理gzip压缩和解压缩,并且解决了中文字符在处理过程中的乱码问题。 gzip是一种广泛使用的数据压缩格式...

    Javascript 实现Base64 + GZIP + AES 加解密

    本篇文章将深入探讨如何利用JavaScript实现Base64、GZIP和AES的加解密技术,结合“crypto-js”和“pako”这两个库来实现这一目标。 首先,让我们了解这三项技术的基础知识: 1. **Base64编码**:Base64是一种用于...

    Arduino uzlib库,用于解压gzip流

    当这些数据以压缩格式,比如GZIP,传输时,我们需要相应的库来解压缩它们。`Arduino uzlib`库就是为了满足这种需求而存在的,它专门设计用于在Arduino平台上解压gzip格式的数据流。 `uzlib`库是一个小巧且高效的...

    C语言编写的GZIP压缩算法(含工程文件,附带测试程序)

    C语言编写的GZIP压缩算法是一项基础而重要的技术,它涉及到数据压缩、文件处理和程序设计等多个领域。GZIP是一种广泛使用的数据压缩格式,由GNU项目开发,主要用于减少文件大小,便于存储和传输。在本项目中,我们有...

    gzip源码,gzip压缩算法

    gzip源码分析与GZIP压缩算法详解 在深入探讨gzip源码和其压缩算法之前,首先需要理解GZIP是什么。GZIP是一种广泛使用的数据压缩格式,主要用于文件传输和存储。它基于DEFLATE算法,该算法结合了LZ77(一种字典压缩...

    pako gzip 压缩和解压缩(支持中文)

    pako是一个高效的JavaScript库,提供了对多种压缩算法的支持,包括gzip。在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。...

    gzip gunzip源码下载以及编译,以及自定义交叉编译方法

    下载gzip-1.10.zip文件后,解压 unzip zip-1.10.zip cd zip-1.10 1.编译本机可用的gzip, ./configure CC="cc" make 该目录下生成可执行文件:gzip gunzip 2.若需要自定义交叉编译工具,解压代码后执行: ./...

Global site tag (gtag.js) - Google Analytics