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. css实现背景模糊,但不影响背景上的内容

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. python序列化与反序列化(json与pickle)

    在python中,序列化可以理解为将python中对象的编码格式转换为json(pickle)格式的字符串,而反序列化可以 理解为将json(pickle)格式的字符串转换为python中对象的编码格 ...

  3. day 24-1 继承

    继承 什么是继承: 继承是一种创建新类的方式,在 python 中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 父类必须在子类上面 一个类 可以被多个类继承 一个 ...

  4. 使用Sales_data类

    写一段程序程序实现求两次交易相加结果的功能.程序的输入是下面这两条交易记录: 0-201-783456-X 3 20.00 0-201-783456-X 3 25.00 程序的结构如下: #inclu ...

  5. springboot整合springdata-jpa

    1.简介  SpringData : Spring 的一个子项目.用于简化数据库访问,支持NoSQL 和 关系数据存储.其主要目标是使数据库的访问变得方便快捷. SpringData 项目所支持 No ...

  6. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  7. L2-006 树的遍历 (25 分)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 题目: 给定一棵二叉树的后序遍历和中序 ...

  8. 正则表达式匹配日期,支持闰年,格式为YYYYMMDD

    年份:[\d]{4} 带31的月份:(0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])) 非2月不带31日的月份:((0[469])|11)((0[1-9])| ...

  9. 记一次简单的PHP代码审计(SSRF案例)

    题目链接: http://oj.momomoxiaoxi.com:9090/ 用dirsearch对网址进行扫描,发现robots.txt 命令行: python3 dirsearch.py -u & ...

  10. 手动安装sublime text3 文本编辑器是控制台

    1 本来想安装一个体积小.功能又强大的文本编辑器,百度了一圈sublime text3 的口碑不错,然后就安装试试吧, 下了以后安装成功后,看到介绍sublime text3功能强大是因为他可以安装多 ...