VB6解压GZIP和C#解压GZIP

VB进行GZIP解压的,DLL是系统的,如果没有点击这里下载

 1 Option Explicit
 2 ‘GZIP API
 3 ‘--------------------------------------------------
 4 Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
 5 Private Declare Function InitDecompression Lib "gzip.dll" () As Long
 6 Private Declare Function CreateDecompression Lib "gzip.dll" (ByRef context As Long, ByVal Flags As Long) As Long
 7 Private Declare Function DestroyDecompression Lib "gzip.dll" (ByRef context As Long) As Long
 8 Private Declare Function Decompress Lib "gzip.dll" (ByVal context As Long, inBytes As Any, ByVal input_size As Long, outBytes As Any, ByVal output_size As Long, ByRef input_used As Long, ByRef output_used As Long) As Long
 9 ‘=============================================================
10 ‘2012-10-5
11 ‘gzip解压,返回值表示是否成功,如果成功,解压结果通过址参回传
12 ‘=============================================================
13 Public Function UnGzip(ByRef arrBit() As Byte) As Boolean
14     On Error GoTo errline
15     Dim SourceSize  As Long
16     Dim buffer()    As Byte
17     Dim lReturn    As Long
18     Dim outUsed    As Long
19     Dim inUsed      As Long
20     Dim chandle As Long
21     If arrBit(0) <> &H1F Or arrBit(1) <> &H8B Or arrBit(2) <> &H8 Then
22         Exit Function ‘不是GZIP数据的字节流
23     End If
24     ‘获取原始长度
25     ‘GZIP格式的最后4个字节表示的是原始长度
26     ‘与最后4个字节相邻的4字节是CRC32位校验,用于比对是否和原数据匹配
27     lReturn = UBound(arrBit) - 3
28     CopyMemory SourceSize, arrBit(lReturn), 4
29     ‘重点在这里,网上有些代码计算解压存放空间用了一些奇怪的公式
30     ‘如:L = 压缩大小 * (1 + 0.01) + 12
31     ‘不知道怎么得到的,用这种方式偶尔会报错...
32     ‘这里的判断是因为:(维基)一个压缩数据集包含一系列的block(块),只要未压缩数据大小不超过65535字节,块的大小是任意的。
33     ‘GZIP基本头是10字节
34     If SourceSize > 65535 Or SourceSize < 10 Then
35         ‘测试用,申请100KB空间尝试一下
36         ‘SourceSize = 102400
37         Exit Function
38     Else
39         SourceSize = SourceSize + 1
40     End If
41     ReDim buffer(SourceSize) As Byte
42     ‘创建解压缩进程
43     InitDecompression
44     CreateDecompression chandle, 1  ‘创建
45     ‘解压缩数据
46     Decompress ByVal chandle, arrBit(0), UBound(arrBit) + 1, buffer(0), SourceSize + 1, inUsed, outUsed
47     If outUsed <> 0 Then
48         DestroyDecompression chandle
49         ReDim arrBit(outUsed - 1)
50         CopyMemory arrBit(0), buffer(0), outUsed
51         UnGzip = True
52     End If
53     Exit Function
54 errline:
55 End Function

C#进行GZIP压缩和解压,参考[MSDN]

 1 public static byte[] GZipCompress(byte[] buffer)
 2 {
 3     using (MemoryStream ms = new MemoryStream())
 4     {
 5         GZipStream Compress = new GZipStream(ms, CompressionMode.Compress);
 6         Compress.Write(buffer, 0, buffer.Length);
 7         Compress.Close();
 8         return ms.ToArray();
 9     }
10 }
11 public static byte[] GZipDecompress(byte[] buffer)
12 {
13     using (MemoryStream tempMs = new MemoryStream())
14     {
15         using (MemoryStream ms = new MemoryStream(buffer))
16         {
17             GZipStream Decompress = new GZipStream(ms, CompressionMode.Decompress);
18             Decompress.CopyTo(tempMs);
19             Decompress.Close();
20             return tempMs.ToArray();
21         }
22     }
23 }
时间: 2024-10-07 05:31:56

VB6解压GZIP和C#解压GZIP的相关文章

解压tar.gz文件报错gzip: stdin: not in gzip format解决方法

解压tar.gz文件报错gzip: stdin: not in gzip format解决方法 在解压tar.gz文件的时候报错 1 2 3 4 5 [[email protected] Downloads]$ tar -zxvf clion-141.351.4.tar.gz gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now 原来原因是这个

Python Gzip压缩与解压模块

from  http://www.iplaypython.com/module/gzip.html 一.使用gzip模块压缩文件 >>> import gzip #导入gzip模块,玩蛇网提示:注意名字为全小写 >>> g = gzip.GzipFile(filename="", mode="wb", compresslevel=9, fileobj=open('sitemap.log.gz', 'wb')) >>&g

Linux各类压宿包的解压方法

01-.tar格式 解包:[*******]$  tar xvf FileName.tar  打包:[*******]$  tar cvf FileName.tar DirName(注:tar是打包,不是压缩!) 02-.gz格式  解压1:[*******]$  gunzip FileName.gz  解压2:[*******]$  gzip -d FileName.gz  压 缩:[*******]$  gzip FileName 03-.tar.gz格式  解压:[*******]$  t

nginx的gzip模块详解以及配置

文章来源运维公会:nginx的gzip模块详解以及配置 1.gzip模块作用gzip这个模块无论在测试环境还是生产环境都是必须要开启,这个模块能高效的将页面的内容,无论是html或者css.js亦或是图片等都可以进行压缩,节省了带宽资源,也提高了网站的加载速度,给浏览者带来更优质的服务. 2.启用gzip只要在nginx的配置文件nginx.conf中去配置.在http{gzip on;gzip_min_length 1k;gzip_buffers 4 32k;gzip_http_version

转 搞懂硬解H.265和软解H.265的区别

相信很多人对于"H.265"这一名词既熟悉又陌生,熟悉的是其大名早已如雷贯耳,大家都知道其比H.264先进(因为H.265是H.264进化而来),而说到陌生则是其主要优势在于哪里大家就不得而知了,随着盒子交战大军的大战爆发,H.265几乎成为了盒子标配,不具备硬解H.265编码.或者支持软解H.265编码的盒子将会被淘汰.下面和大家详细道来H.265的"前世今生". 关于H.265 H.265是ITU-T VCEG 继H.264之后所制定的新的视频编码标准.H.26

感受真实性能压测的“洪荒之力” 压测宝有奖体验中

作为测试,你有没有遇到这样的问题:1.熬了多少个日夜的系统终于快上线了,不知道上线后系统负载能力怎样?2.促销季到了,应用性能如何?到底能不能支持500w并发用户?3.怎么做压测才能更接近线上真实环境? 系统负载有多强,压测一下就知道.云智慧压测宝3步6分钟 开启真实用户的性能压测 8月16至9月2日申请试用压测宝,感受真实压测的洪荒之力,还有机会获得优酷视频会员卡,速速来领- 参与活动赢优酷会员卡 1.从这里申请试用压测宝:[url=http://yacebao.com/landingPage

iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

这里接着前文<iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)>,主要是干货环节,列举了如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 三. 常用方法的封装 虽然 PhotoKit 的功能强大很多,但基于兼容 iOS 8.0 以下版本的考虑,暂时可能仍无法抛弃 ALAssetLibrary,这时候一个比较好的方案是基于 ALAssetLibrary 和 PhotoKit 封装出一系列模拟系统 Asset 类的自定义类,然后在其中封装好兼容 A

iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 这里引用一下前文中对 PhotoKit 基本构成的介绍: PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源 PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值 PHAssetCo

android WebView详解,常见漏洞详解和安全源码

这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView 的使用,下篇讲述 WebView 的漏洞和坑,以及修复源码的解析. 下篇:android WebView详解,常见漏洞详解和安全源码(下) 转载请注明出处:http://blog.csdn.net/self_study/article/details/54928371. 对技术感兴趣的同鞋加群 54

【Git使用详解】EGit使用详解

此系列文章写给那些打算使用Git或正在使用Git,但对Git还不是很理解的程序猿们,希望能帮助大家在学习和使用Git的过程中少走弯路,并以最少的时间和代价来熟悉Git,让Git能够辅助更多的开发者提高开发效率. Ps.使用Git已经很久了,回想当初使用Git的时候可谓是雾里看花,懵懵懂懂,没少犯错误,但我从未畏惧过错误,每一次错误的解决都是对我技术的提升和经验的积累. 下面是此系列文章的目录: [Git使用详解]Egit插件的安装图解 [Git使用详解]使用Egit克隆项目到本地图解 [Git使