.NET和Android解压缩处理
1.C#代码(需要调用SharpZipLib):
using System.IO; using System.Text; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; namespace ConsoleApplicationDemo { public class ZipHelper { /// <summary> /// 以Deflater方式压缩字符串,返回字节数组 /// </summary> /// <param name="sString"></param> /// <returns></returns> public static byte[] ZipStr(string sString) { if (sString == null) return null; byte[] bytes = Encoding.UTF8.GetBytes(sString); return ZipByte(bytes); } /// <summary> /// 以Deflater方式压缩字节数组 /// </summary> /// <param name="bytes"></param> /// <returns></returns> public static byte[] ZipByte(byte[] bytes) { if (bytes == null) { return null; } MemoryStream ms = new MemoryStream(); using (DeflaterOutputStream zStream = new DeflaterOutputStream(ms)) { zStream.Write(bytes, 0, bytes.Length); zStream.Finish(); zStream.Close(); } byte[] result = ms.ToArray(); ms.Close(); return result; } /// <summary> /// 解压字节数组 /// </summary> /// <param name="bytes"></param> /// <returns></returns> public static byte[] UnZip(byte[] bytes) { if (bytes == null) { return null; } MemoryStream ms = new MemoryStream(); using (InflaterInputStream stream = new InflaterInputStream(ms)) { stream.Write(bytes, 0, bytes.Length); stream.Flush(); stream.Close(); } byte[] result = ms.ToArray(); ms.Close(); return result; } } }
2.Android代码:
package com.google.test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.zip.*; public class ZipHelper { private final static int CacheSize = 1024; /*** * 压缩Zip * * @param data * @return */ public static byte[] zipByte(byte[] data) { Deflater compresser = new Deflater(); compresser.reset(); compresser.setInput(data); compresser.finish(); byte result[] = new byte[0]; ByteArrayOutputStream o = new ByteArrayOutputStream(1); try { byte[] buf = new byte[CacheSize]; int got = 0; while (!compresser.finished()) { got = compresser.deflate(buf); o.write(buf, 0, got); } result = o.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { o.close(); } catch (IOException e) { e.printStackTrace(); } compresser.end(); } return result; } /*** * 压缩String * * @param data * @return */ public static byte[] zipString(String data) { byte[] input = new byte[0]; try { input = data.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } byte[] result = ZipHelper.zipByte(input); return result; } /*** * 解压Zip * * @param data * @return */ public static byte[] unZipByte(byte[] data) { Inflater decompresser = new Inflater(); decompresser.setInput(data); byte result[] = new byte[0]; ByteArrayOutputStream o = new ByteArrayOutputStream(1); try { byte[] buf = new byte[CacheSize]; int got = 0; while (!decompresser.finished()) { got = decompresser.inflate(buf); o.write(buf, 0, got); } result = o.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { o.close(); } catch (IOException e) { e.printStackTrace(); } decompresser.end(); } return result; } /*** * 解压Zip数据为String * * @param data * @return */ public static String unZipByteToString(byte[] data) { byte[] result = unZipByte(data); String outputString = null; try { outputString = new String(result, 0, result.length, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return outputString; } }