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

 Option Explicit
'GZIP API
'--------------------------------------------------
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function InitDecompression Lib "gzip.dll" () As Long
Private Declare Function CreateDecompression Lib "gzip.dll" (ByRef context As Long, ByVal Flags As Long) As Long
Private Declare Function DestroyDecompression Lib "gzip.dll" (ByRef context As Long) As Long
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
'=============================================================
'2012-10-5
'gzip解压,返回值表示是否成功,如果成功,解压结果通过址参回传
'=============================================================
Public Function UnGzip(ByRef arrBit() As Byte) As Boolean
On Error GoTo errline
Dim SourceSize As Long
Dim buffer() As Byte
Dim lReturn As Long
Dim outUsed As Long
Dim inUsed As Long
Dim chandle As Long
If arrBit() <> &H1F Or arrBit() <> &H8B Or arrBit() <> &H8 Then
Exit Function '不是GZIP数据的字节流
End If
'获取原始长度
'GZIP格式的最后4个字节表示的是原始长度
'与最后4个字节相邻的4字节是CRC32位校验,用于比对是否和原数据匹配
lReturn = UBound(arrBit) -
CopyMemory SourceSize, arrBit(lReturn),
'重点在这里,网上有些代码计算解压存放空间用了一些奇怪的公式
'如:L = 压缩大小 * (1 + 0.01) + 12
'不知道怎么得到的,用这种方式偶尔会报错...
'这里的判断是因为:(维基)一个压缩数据集包含一系列的block(块),只要未压缩数据大小不超过65535字节,块的大小是任意的。
'GZIP基本头是10字节
If SourceSize > Or SourceSize < Then
'测试用,申请100KB空间尝试一下
'SourceSize = 102400
Exit Function
Else
SourceSize = SourceSize +
End If
ReDim buffer(SourceSize) As Byte
'创建解压缩进程
InitDecompression
CreateDecompression chandle, '创建
'解压缩数据
Decompress ByVal chandle, arrBit(), UBound(arrBit) + , buffer(), SourceSize + , inUsed, outUsed
If outUsed <> Then
DestroyDecompression chandle
ReDim arrBit(outUsed - )
CopyMemory arrBit(), buffer(), outUsed
UnGzip = True
End If
Exit Function
errline:
End Function

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

 public static byte[] GZipCompress(byte[] buffer)
{
using (MemoryStream ms = new MemoryStream())
{
GZipStream Compress = new GZipStream(ms, CompressionMode.Compress);
Compress.Write(buffer, , buffer.Length);
Compress.Close();
return ms.ToArray();
}
}
public static byte[] GZipDecompress(byte[] buffer)
{
using (MemoryStream tempMs = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(buffer))
{
GZipStream Decompress = new GZipStream(ms, CompressionMode.Decompress);
Decompress.CopyTo(tempMs);
Decompress.Close();
return tempMs.ToArray();
}
}
}

VB6进行GZIP解压&C#进行GZIP压缩和解压的更多相关文章

  1. C#实现通过Gzip来对数据进行压缩和解压

    C#实现通过Gzip来对数据进行压缩和解压 internal static byte[] Compress(byte[] data) { using (var compressedStream = n ...

  2. 使用pako.js实现gzip的压缩和解压

    poko.js可至Github下载:https://github.com/nodeca/pako 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  3. 对数据进行GZIP压缩和解压

    public class GzipUtils { /** * 对字符串进行gzip压缩 * @param data * @return * @throws IOException */ public ...

  4. linux学习之路第七天(压缩和解压类指令详解)

    压缩和解压类 1.gzip/gunzip 指令 gzip 指令用于压缩文件, gunzip用于解压的 基本语法 gzip 文件 (功能描述:压缩文件,指令将文件压缩成*.gz文件) gunzip 文件 ...

  5. linux常用命令:4文件压缩和解压命令

    文件压缩和解压命令 压缩命令:gzip.tar[-czf].zip.bzip2 解压缩命令:gunzip.tar[-xzf].unzip.bunzip2 1. 命令名称:gzip 命令英文原意:GNU ...

  6. .net文件压缩和解压及中文文件夹名称乱码问题

    /**************************注释区域内为引用http://www.cnblogs.com/zhaozhan/archive/2012/05/28/2520701.html的博 ...

  7. Linux下的压缩和解压

    1. gzip, bzip2 能否直接压缩目录呢?不可以 2. 请快速写出,使用gzip和bzip2压缩和解压一个文件的命令.压缩:gzip 1.txt bzip2 1.txt解压:gzip -d 1 ...

  8. Linux下tar bz gz等压缩包的压缩和解压

    Linux下用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩,本文是对压缩和解压命令的大致总结 .tar.gz  解压:tar zxvf FileName.tar.gz  ...

  9. Linux下tar bz gz等压缩包的压缩和解压【转】

    Linux下用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩,本文是对压缩和解压命令的大致总结 .tar.gz  解压:tar zxvf FileName.tar.gz  ...

随机推荐

  1. P5283 [十二省联考2019]异或粽子

    考场上想到了没打完,细节思路还是不是很优,我原先的想法是每一次找完后标记那个点,下次再继续找(并不是这个意思,说不清楚)但实际上和平衡树一样加个大小就很好写了 #include<bits/std ...

  2. Matcher.replaceFirst(String replacement)

    java.util.regex.Matcher.replaceFirst(String replacement)方法是用来进行字符串的替换操作. public String replaceFirst( ...

  3. vue.nextTick简单的用法

    官方文档: 自己写了一个小demo: <template> <div> <p ref="txt" v-if="show">{ ...

  4. cnpm下载包与npm版本不一致的问题解决

    参考链接:https://www.jianshu.com/p/949b4e0ae190

  5. 2018-2019-2 20165234 《网络对抗技术》 Exp5 MSF基础应用

    实验五 MSF基础应用 实验内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.一个主动攻击实践,ms08_067(成功) 2. 一个针对浏览器 ...

  6. CNN卷积神经网络

    import os # third-party library import torch import torch.nn as nn import torch.utils.data as Data i ...

  7. 【NLP】依存句法关系符号解释

    今天开始读一篇论文:leveraging linguistic structure for open domain information extraction 于是……重新复习了很多句法分析的内容, ...

  8. 微信小程序开发学习(一)

    一.各种JSON配置 1.小程序配置app.json 为小程序全局配置,包括所有页面路径.界面表现.网络超时时间.底部tab等,类比APP开发中manifest配置. 2.工具配置project.co ...

  9. .Net 入门资料推荐 (编辑中)

    1.首先推荐 网易云课堂上的一个付费课程:常老师带你学ASP.NET MVC ,价格199元 2. 一个.net的框架,ABP,中文介绍如下 http://www.cnblogs.com/farb/p ...

  10. HTML 动画收藏

    各种loading图标动画 http://www.yyyweb.com/377.html http://www.yyyweb.com/350.html