.NET和Android解压缩处理

来源:互联网 发布:淘宝主图视频在线制作 编辑:程序博客网 时间:2024/06/15 19:22
转自:http://www.cnblogs.com/ahui/archive/2011/04/21/2023847.html
ICSharpCode.SharpZipLib 下载地址:http://download.csdn.net/detail/pot2217_331/2228906

1.C#代码(需要调用SharpZipLib):
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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代码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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;
    }
}