zxl_ong 发表于 2013-2-7 09:41:36

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;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;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 blocke.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;    int n;    while ((n = gunzip.read(buffer)) >= 0) {      out.write(buffer, 0, n);    }    // toString()使用平台默认编码,也可以显式的指定如toString("GBK")    return out.toString();}

三、如下是从一个网站上偷来的http://www.agoit.com/images/smiles/icon_redface.gif
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;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;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);}}
页: [1]
查看完整版本: GZIP