对数据进行GZIP压缩和解压

原文链接:http://www.cnblogs.com/atomicbomb/p/6647611.html
public class GzipUtils {

    /**
     * 对字符串进行gzip压缩
     * @param data
     * @return
     * @throws IOException 
     */
    public static String compress(String data) throws IOException {
        if (null == data || data.length() <= 0) {
            return data;
        }
        //创建一个新的byte数组输出流
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        //使用默认缓冲区大小创建新的输出流
        GZIPOutputStream gzip = new GZIPOutputStream(out);
        //将b.length个字节写入此输出流
        gzip.write(data.getBytes());
        gzip.flush();
        gzip.close();
        
        //使用指定的charsetName,通过解码字节将缓冲区内容转换为字符串
        return out.toString("ISO-8859-1");
    }
    
    /**
     * 对字符串进行解压缩
     * @param data
     * @return
     * @throws Exception 
     */
    public static String unCompress(String data) throws Exception {
        if (null == data && data.length() <= 0) {
            return data;
        }
        //创建一个新的byte数组输出流
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        //创建一个byte数组输入流
        ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes("ISO-8859-1"));
        //创建gzip输入流
        GZIPInputStream gzip = new GZIPInputStream(in);
        byte[] buf = new byte[1024];
        int len = 0;
        while ((len = gzip.read(buf)) >= 0) {
            out.write(buf, 0, len);
        }
        // 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串
        return out.toString("UTF-8");
    }

Gzip压缩和解压数据代码

转载于:https://www.cnblogs.com/atomicbomb/p/6647611.html

展开阅读全文
博主设置当前文章不允许评论。

再问SPI截获的GZIP压缩数据解压

08-09

数据形式如下:rnrnHTTP/1.1 200 OKrnDate: Tue, 03 Aug 2004 09:42:21 GMTrnServer: Apache/2.0.50 (Unix)rnPragma: no-cachernCache-Control: no-cachernExpires: 0rnVary: Accept-Encoding,User-AgentrnContent-Encoding: gziprnContent-Length: 1101rnConnection: closernContent-Type: text/html; charset=gb2312rnrn? 蚔遫E~蟔?翹$l7m攛棦B+膹?B怔n辴o鞲]??肹蔆bDI覉4jJ*詳ㄢrnE*j??Z?1謦!蜮涃跷蝲;咛擾淑QU启Ilて)丕1禱€剅遟"€矲S?虭??g伬!貋泯珚.?摠R?皜.?帺?N斅簲€譭庆W署4苫縧!) F鼒?茅?NO5螸_8囷驭?蟳`?]c缵T_縋フ?7貊垣晏+臦w昴╀3V;u矘葏尡垕橮湺€~n?\0?6n_當侎iR篐呸岬妧O雟狸謰?C?綛1?鼱橨偔澒屙?瀩m琨卂Wfn浺2?3;腙室陑n~窕汯縨\劬12q腌k縪韒綏[唠?>6鈼O?7只慧w枮e譜?~骽狺鍸霭T4W?聩孚荃瀘?浃砄你€貮^Zh繈栗楷仩嘮wy顉鬓?\?嫵环?>?安0减p鼳w髹?骰k唸#貱╦?€r??$灳豑$牰粳'灃2??N悙?^纕8潖舟Ig€?样h?vt>?甥7?纟?愚I?G浿遦孠77?<]軰樥汵'"hB 乐0布泴,至^rn~Z綐V劉渮跒V笑湠?d_L篰异襥'偣??3'+需&=\(岯溜?貰?醼主????&啞瞔&J杠閸?枒]L? rnrnrn那位高手能帮我做一下解压,高分相送(200)!rnrn问题是这样的 ,我根据Content-Length: 1101字段,把压缩的数据取出来,我把“\r\n”去除了的,使用ZLIB函数库解压,总是失败,说数据是坏的,我搞了2天,没辙了,只好请高手帮忙。rnrn还有有的朋友说参考费尔的代码rnrn费尔的代码在有的应用程序上接收不到RECV的数据(比如IE),而且他不检查数据的!rnrn 论坛

我想对经过GZIP压缩数据进行解压,但是不知道数据的格式,无从下手。

07-30

我HOOK了recv函数,抓取了浏览网页的数据包。但是其是经过gzip进行压缩的,所以要对其解压。rn我上网找了些资料,发现基本上都只是对算法的原理进行了一些讲解,但是没有描述压缩后的数据的格式。rnrn请问其格式是什么样的?rnrn以下是我抓到的两段压缩数据的十六进制:rn第一段:1F 8B 08 00 00 00 00 00 00 0B B5 58 EB 6E 1B C7 15 FE 6D 01 7A 87 D1 06 50 24 C4 E6 8A A4 A8 2B 57 01 45 AE 65 45 17 52 D4 CA B2 63 18 C4 72 77 48 AE B5 17 6A 77 78 53 52 C0 49 9B 36 76 81 26 69 8B 02 75 0D A4 35 EA C2 41 91 04 B0 81 C0 28 DC A7 49 29 C9 BF F2 0A 3D 33 7B E1 92 5C 2A 94 8D 10 12 B8 B3 9C 39 73 E6 7C 67 BE 73 99 9C 48 4F E5 F2 59 E9 76 41 44 35 62 E8 A8 70 B0 BE BD 99 45 DC 35 9E 3F 4C 66 79 3E 27 E5 D0 AD 1B D2 CE 36 8A C7 E6 90 64 CB A6 A3 11 CD 32 65 9D E7 C5 5D 0E 71 35 42 EA 2B 3C DF 6A B5 62 AD 64 CC B2 AB BC 54 E4 DB 54 56 9C 2E F6 1E AF 91 D0 CA 98 4A 54 6E 6D 72 62 72 22 CD F6 6C 1B BA E9 08 11 92 E2 CB CB CB AE 00 0E C1 FC 74 0D CB 2A D2 54 81 BB 01 0F 71 6E 2D 4D 34 A2 63 F8 E5 4A F7 9F DF 74 BF FD B2 FB E9 8B EE D3 DF A1 BC A9 6B 26 FE E9 BF 8F BB 2F 5F 9C FF F5 EB B3 3F BF 38 FF F7 EF 61 39 EF 4E 4F 1B 98 C8 70 5A 52 BF 86 8F 1B 5A 53 E0 B2 96 49 B0 49 AE 49 9D 3A E6 90 E2 8E 04 8E E0 36 E1 A9 86 AB 48 A9 C9 B6 83 89 50 D6 AA 29 0E F1 6B AE 8C 60 E6 8E A6 D8 96 63 55 08 BA A9 39 0D 59 47 FB A4 A1 6A 16 8A ED 8A 12 5A 8C C5 39 64 CA 06 16 B8 0D 71 57 2C 66 A4 7C 31 42 46 F6 1D 7F 56 36 9F 13 4B DB 99 DD 8D 83 CC 86 18 31 F3 03 B9 29 EF 2B B6 56 27 FE 8A A6 53 52 71 45 6E E8 24 AB 6B 70 12 FF D7 21 45 3D B4 1C A5 86 0D D9 89 19 BE DE 31 C5 32 78 0D AC A0 EB 9A 83 4D 07 F3 1A 86 83 BA 5A 83 74 22 DB 55 0C 62 E9 32 A6 11 58 F8 08 D5 6C 5C 11 B8 0A D8 2B A6 38 0E 87 6C AC 0B 9C 43 3A 3A 76 6A 18 83 76 04 0C EA D9 91 4D 80 85 3C 05 91 82 59 B6 D4 0E 7C 23 F8 A4 2B 96 6D 78 9B D1 47 B0 17 60 54 B3 00 E9 BA E5 80 1C 59 A1 3E 27 70 9A A9 E2 76 4C 76 EA 6D 0E 59 A6 D3 28 1B 1A 11 B8 7B 60 0F 87 D9 63 C5 C6 A4 61 9B E8 10 97 AF 83 9C 52 DE DC 67 73 66 66 57 39 E6 38 AE 74 BA BD AA 35 E9 97 66 D6 1B C4 D3 B3 A6 A9 2A 36 FD 53 97 4A E2 4D 71 57 92 32 C5 0D 51 72 57 0F BC 6A CA 7A 03 8E 47 8F 35 8E 24 10 74 B0 03 12 FB 64 F5 5E 8E 2F ED E6 A6 78 B8 2F 65 24 F0 0D 7A A6 52 29 F4 C2 93 C2 B7 C4 42 AE 75 B0 BD 2D 89 27 3B 39 B1 BD 7B 92 99 CF 4B BB 47 1F 66 8A 1D E5 C3 CA E6 CE 71 B6 52 2C B4 9A 62 A7 F1 5E EA D6 6D B5 21 DE E0 BD 73 F0 AE 65 E0 44 AE 4D C3 20 F6 2C 4D EF 2F CF A7 A7 EE 64 73 19 29 73 67 72 A2 29 DB 88 D4 30 35 3B 12 90 6A 29 0D rn第二段:03 1C 31 46 0D EE DC 79 97 D9 FD DD BB AB 93 13 5A 05 CD 4C 79 13 67 D1 47 AE 03 8C 58 18 87 F9 BF 9A 9C A8 34 4C 86 3F 2A 95 54 AB 00 0E B1 2E 2B 47 33 B8 09 F2 25 E6 97 57 11 1B 64 EC 2A DB 34 10 1B DE 2B E6 FB 0B FA F8 63 34 E3 6D 18 BC 9C 99 45 53 02 AA C8 BA 83 67 83 E5 D4 35 FD 89 7D D0 C7 98 95 E1 98 21 1D 40 55 3A 3F 62 8D 0F 71 FF 2A 5F D9 88 75 AE 5F 83 CF BA 22 C1 02 F0 C7 F3 77 EF 52 37 E3 5D 54 E0 91 11 A8 87 91 63 2B 02 C7 83 DB 17 B1 63 35 6C 05 C7 E4 B6 FA BE 2A 9C DC CB EF 2C 65 74 67 A1 B8 61 EC D6 94 BC 59 28 69 4A 35 31 2D 1B F5 55 22 2C 24 E7 E3 C9 B9 64 7C 61 71 79 29 B9 98 9A 9B 9B EB BB B2 61 B4 2F B9 AF BC D8 D2 0F 6B 4B 27 8D F2 9E B1 2E 96 E4 6C 7C 6E 7F 6B C1 6A D4 52 46 CA 5A 2C 7D A0 A6 76 8E 8F AD F5 4D FB F6 4E FC AD 94 B9 9C 93 06 9E 34 4C 10 D4 15 A9 BF 50 CA B2 2A 33 37 65 5D 53 65 62 D9 3E 85 CC 22 41 40 9C 2F 80 43 D3 D3 68 68 0E 78 11 4C 72 BD 08 C8 90 51 11 1B 01 92 DE 90 D8 0D 3A 1A 01 A8 C7 4A 10 D0 7E 9E 98 6E 66 B6 37 E1 EE 6D E6 21 0A BB 34 C0 F8 2A FC BA 47 06 87 EB 7B 5B 47 06 39 91 32 7B 5B 07 F7 96 2A B5 5C 66 2B 7E 5C DE 2F 66 5B 5B 3B A9 79 7B 63 BD BA B5 67 2D 6D D9 B9 62 FB A8 73 52 B0 F3 89 E6 52 CB 5A 5C E2 E7 AA B9 EA C1 81 E8 58 7B EF 85 09 82 FA 39 A8 79 E5 4A 9A C8 65 1D 23 05 22 C7 7E 5D 56 34 B3 2A 70 E0 46 74 5C 90 55 D5 1F 83 39 AB 40 E0 0A 5C 4F 6C 73 A8 6C D9 2A B6 E9 4C 70 64 90 02 62 6C EF 09 1E 55 54 C3 5A B5 06 D4 9E 48 C0 8C 34 44 6B 16 69 BC E8 05 B1 3A A6 D4 20 C4 3B B8 0A 61 D5 8E 99 98 00 7B B9 31 0A F8 B0 AC CB E6 11 2C D3 8C 2A 62 17 43 33 E4 2A 76 78 DD AA 5A B1 AA 56 E1 50 4B 53 49 4D E0 52 F3 F3 5C B0 55 3C 01 83 9E 5E 2C 56 C9 F0 4F 68 B4 62 2A F2 81 8E 3D 6D 21 78 85 D4 4D A6 E0 E8 03 47 45 8A 2E 3B 90 DE 64 F3 BB 12 65 FF B5 74 D9 66 11 83 CA BC 02 EB EB 6B 69 87 D8 96 59 F5 67 4A F1 54 91 5B FB F1 FE 97 90 B6 9C BF 7A D9 FD EC E9 E9 A7 CF CE 1E FD E6 7F 2F BF 3D FF E2 FB D7 9F 3C 3C FD FC F9 D9 0F CF 4F 1F FF BA FB A7 7F B8 39 4E F7 8B 87 DD EF 7F 7B F6 E4 D5 8F F7 BF 82 AB CA C4 81 EE F5 D0 36 2E 4E DE C9 E1 B6 F7 1D 76 10 AE 01 38 7D 31 7D 38 31 D4 54 DF 96 71 40 CA 3F BA 4D C1 E3 10 B8 1F 03 9D 58 75 70 08 D7 0A D2 2D B0 40 58 F3 9F 5E 3D F2 6C 1C 12 96 48 81 7A DE 6A 1D 57 46 C9 8A 27 29 CA 2C 82 BB 99 0A 69 93 8C A2 58 0D B3 2F F7 80 6C 42 6E EB D8 AC 52 CC 93 A0 26 BD 2E 7D 53 69 1A 29 70 9E AD 43 66 E5 10 CB 66 04 8E 99 6D 25 11 4F D5 DB 90 49 80 6B AC 17 D7 18 7E 14 C1 1E F3 FB 11 20 EA 1B 92 1C 93 40 72 A9 5B E0 F7 EF 2C 97 97 16 16 A9 FA 4E 5D 36 99 42 45 9A 8C DA 58 BD AE 61 5D 0D A8 05 52 21 4F 05 B6 72 A5 88 D5 D5 A6 E6 68 65 4D D7 48 67 C5 4D 59 56 B9 35 D7 0D 4E 9F FF F1 F4 F1 03 F7 1C E0 06 20 1A 9C 80 EE 1B F6 E3 3E 4F 66 20 06 57 CF 83 D4 B3 FC 98 30 32 BF EB C1 18 98 85 E2 19 E9 02 00 5B 1F B8 43 18 16 E0 C2 B4 80 21 FC 68 54 0F C6 D1 40 86 E6 47 20 C9 F4 BB 10 C9 71 00 7C 33 F8 12 E3 C2 C7 94 1C 13 BE 30 13 B9 F8 0D 70 4E EF BA BA F4 04 AE 03 DC 0C 37 11 D4 F1 EF 21 BB 3B 03 C4 4A 8B B8 21 62 35 B0 51 C6 F6 3C CD BA 87 39 F6 F4 EB A7 E7 DF 3C F1 EE 33 3B 03 25 CD 69 B3 EC D4 57 A1 00 73 1F 2E B1 4D F4 2E DD 87 7F 07 12 8C A4 BF 31 B6 83 70 21 2B 75 7D F8 64 C3 C7 71 4B C5 D7 F7 1F 9D 3F 7B D8 FD EE 41 F7 B3 67 AF FF F0 97 81 30 00 17 1E AC DA 8B 05 3F 83 00 E3 C8 10 00 3D 6C E0 E6 45 52 C2 38 DE 08 1A 78 51 24 8A 6A 06 DF 8D 2D B1 4F B9 70 69 E4 A6 A4 7E 69 B4 DE 20 C4 32 81 9A BC 04 E3 EC C9 7F BA DF 3D A2 25 99 A2 6B CA 51 5F 45 E6 67 5A B9 20 73 3F D4 48 2D 5F A7 09 BD 33 63 E2 56 50 AC F9 99 BD FF DB F4 71 C3 22 AB DE 5E EE E0 2A 72 BF FD 11 CD A6 06 DF F5 CF 60 E9 D7 55 3F B3 77 A9 3F 50 9F F5 03 04 EE F4 F3 AF CE FF F5 89 8B 7D F7 6F 0F A6 A6 A6 DC 4A 75 98 38 DF E6 E6 05 71 7F 10 1D 77 7C 41 C2 77 83 D5 A5 2C 2E 80 CD 59 FF A3 EF 0D 4D 26 A2 85 86 DF FA 0E 13 CA 68 A8 EB 86 1C 99 B9 35 CD E6 5C 37 40 88 66 27 97 CA 7F 52 0B 1C F2 19 E6 7A 3E 2F 89 D0 E8 F0 D8 A0 27 A8 EF F6 0C 66 52 E3 71 52 44 72 A7 58 F5 0E 0D 58 7D 09 DE C2 FC 72 2F C1 4B 02 FB 5D 90 DF 05 6A 79 78 04 A6 A0 E3 37 A9 86 0B 90 74 96 82 40 EE 40 B9 88 A8 BB 67 6C 5B EE CC 04 05 32 94 AF A2 8E 69 D9 BA DE D9 54 67 46 A6 01 B3 57 7B 45 F5 78 6B 12 DC 2C 2D 21 A3 0A C7 CB 55 4D B4 B4 1F 91 9D 84 4B 7D 59 D7 D1 FB 3D 25 61 78 67 E4 69 EE A2 95 CB 1E 27 CE D1 D3 8C D0 03 FA 57 26 24 BD 3A B1 68 C6 01 85 1B AD CE C3 39 DE 05 4B B1 6D 43 77 02 3B 0E E0 45 57 45 6F C1 5D 24 81 F2 A0 4C 19 2D 28 30 47 CA 11 DD B9 78 D3 61 AE 71 91 58 CD 84 56 AB AC 33 92 A5 8A D1 B9 A3 B1 48 BC 19 16 09 EE 0D B0 00 D7 1A 69 8E C4 48 2C 82 34 ED 82 B5 6F 0B 46 22 86 7F 09 30 12 B1 28 30 A2 AE D6 65 99 C2 85 34 CC 15 E0 46 19 E8 77 35 29 E6 7E F7 20 BA 33 B1 6D C9 EA 40 5F 22 68 5E 05 C4 93 37 E9 34 D6 4D 82 AE 43 A8 9B 16 9A E1 77 49 FD 7E 1C DD 2E 52 A5 BE DE 98 D7 D2 08 E4 64 2D C3 B0 CC 50 CF 35 E8 5F 51 0A C5 10 88 7D F9 74 DC DF 10 A1 6F DC 46 17 7D A2 9F 61 E3 D2 52 C6 36 20 38 A5 79 AF 79 0C DD 64 68 CF C3 9B FF 03 7A 13 6E F1 C8 18 00 00 论坛

对RTF进行压缩解压出错

12-01

因为richtextbox中的文本带有格式,有时候还带有图片,因些想先把rtf压缩后再存到mdb,之后再从mdb解压显示到richtextbox,但过程中解压报错[color=#FF0000](GZip 头中的幻数不正确。请确保正在传入 GZip 流)[/color],望大师门解惑~rnrn[code=vb]rn Dim zpied As Stringrn zpied =GZipMe.CompressString(RichTextBox1.Rtf )rn RichTextBox1.Rtf = GZipMe.DecompressString(zpied)'报错rnrn[/code]rnrnrnrn[code=vb]rnrnrnImports SystemrnImports System.IOrnImports System.IO.CompressionrnrnrnPublic Class GZipMern ''' rn ''' 对字符串进行压缩rn ''' rn ''' 待压缩的字符串rn ''' 压缩后的字符串rn Public Shared Function CompressString(ByVal str As String) As Stringrn Dim compressString1 As String = ""rn Dim compressBeforeByte As Byte() = System.Text.Encoding.UTF8.GetBytes(str)rn Dim compressAfterByte As Byte() = GZipMe.Compress(compressBeforeByte)rn compressString1 = System.Text.Encoding.UTF8.GetString(compressAfterByte)rn Return compressString1rn End Functionrn ''' rn ''' 对字符串进行解压缩rn ''' rn ''' 待解压缩的字符串rn ''' 解压缩后的字符串rn Public Shared Function DecompressString(ByVal str As String) As Stringrn Dim compressString2 As String = ""rn Dim compressBeforeByte As Byte() = System.Text.Encoding.UTF8.GetBytes(str)rn Dim compressAfterByte As Byte() = GZipMe.Decompress(compressBeforeByte)rn compressString2 = System.Text.Encoding.UTF8.GetString(compressAfterByte)rn Return compressString2rn End Functionrn ''' rn ''' 对文件进行压缩rn ''' rn ''' 待压缩的文件名rn ''' 压缩后的文件名rn Public Shared Sub CompressFile(ByVal sourceFile As String, ByVal destinationFile As String)rn Throw New Exception("The method or operation is not implemented.")rn End Subrn ''' rn ''' 对byte数组进行压缩rn ''' rn ''' 待压缩的byte数组rn ''' 压缩后的byte数组rn Public Shared Function Compress(ByVal data As Byte()) As Byte()rn Tryrn Dim ms As New MemoryStream()rn Dim zip As New GZipStream(ms, CompressionMode.Compress, True)rn zip.Write(data, 0, data.Length)rn zip.Close()rn Dim buffer As Byte() = New Byte(ms.Length - 1) rn ms.Position = 0rn ms.Read(buffer, 0, buffer.Length)rn ms.Close()rnrn Return bufferrn Catch e As Exceptionrn Throw New Exception(e.Message)rn End Tryrn End Functionrn Public Shared Function Decompress(ByVal data As Byte()) As Byte()rn Tryrn Dim ms As New MemoryStream(data)rn Dim zip As New GZipStream(ms, CompressionMode.Decompress, True)rn Dim msreader As New MemoryStream()rn Dim buffer As Byte() = New Byte(4095) rn While Truern Dim reader As Integer = zip.Read(buffer, 0, buffer.Length)'报错rn If reader <= 0 Thenrn Exit Whilern End Ifrn msreader.Write(buffer, 0, reader)rn End Whilern zip.Close()rn ms.Close()rn msreader.Position = 0rn buffer = msreader.ToArray()rn msreader.Close()rn Return bufferrn Catch e As Exceptionrn Throw New Exception(e.Message)rn End Tryrn End FunctionrnEnd Classrnrnrnrn[/code] 论坛

没有更多推荐了,返回首页