• Visual Basic 6 API压缩数据


    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy 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
    Private Const OFFSET As Long = &H8
    
    '解压缩数组
    Public Function UnCompressByte(ByteArray() As Byte) As Boolean
    Dim BufferSize As Long
    Dim buffer() As Byte
    Dim lReturn As Long
    Dim outUsed As Long
    Dim inUsed As Long
        '创建解压缩后的缓存
        CopyMemory BufferSize, ByteArray(0), OFFSET
        BufferSize = BufferSize + (BufferSize * 0.01) + 12
        ReDim buffer(BufferSize) As Byte
        '创建解压缩进程
        Dim contextHandle As Long: InitDecompression
        CreateDecompression contextHandle, 1    '创建
        '解压缩数据
        lReturn = Decompress(ByVal contextHandle, ByteArray(0), UBound(ByteArray) + 1, buffer(0), BufferSize, inUsed, outUsed)
        DestroyDecompression contextHandle
        '删除重复的数据
        ReDim Preserve ByteArray(0 To outUsed - 1)
        CopyMemory ByteArray(0), buffer(0), outUsed
    End Function
    

      压缩

    Option Explicit
    'Declares
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    Private Declare Function Compress Lib "zlibwapi.dll" Alias "compress" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As Long
    Private Declare Function uncompress Lib "zlibwapi.dll" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As Long
    Private Const OFFSET As Long = &H8
    '压缩数组
    Public Function CompressByte(ByteArray() As Byte) As Boolean
        Dim BufferSize As Long
        Dim TempBuffer() As Byte
        'Create a buffer to hold the compressed data
        BufferSize = UBound(ByteArray) + 1
        BufferSize = BufferSize + (BufferSize * 0.01) + 12
        ReDim TempBuffer(BufferSize)
        'Compress byte array (data)
        CompressByte = (Compress(TempBuffer(0), BufferSize, ByteArray(0), UBound(ByteArray) + 1) = 0)
        'Add the size of the original data
        Call CopyMemory(ByteArray(0), CLng(UBound(ByteArray) + 1), OFFSET)
        'Remove redundant data
        ReDim Preserve ByteArray(0 To BufferSize + OFFSET - 1)
        CopyMemory ByteArray(OFFSET), TempBuffer(0), BufferSize
    End Function
    '解压缩数组
    Public Function UnCompressByte(ByteArray() As Byte) As Boolean
        Dim OrigLen As Long
        Dim BufferSize As Long
        Dim TempBuffer() As Byte
        'Get the original size
        Call CopyMemory(OrigLen, ByteArray(0), OFFSET)
        'Create a buffer to hold the uncompressed data
        BufferSize = OrigLen
        BufferSize = BufferSize + (BufferSize * 0.01) + 12
        ReDim TempBuffer(BufferSize)
        'Decompress data
        UnCompressByte = (uncompress(TempBuffer(0), BufferSize, ByteArray(OFFSET), UBound(ByteArray) - OFFSET + 1) = 0)
        'Remove redundant data
        ReDim Preserve ByteArray(0 To BufferSize - 1)
        CopyMemory ByteArray(0), TempBuffer(0), BufferSize
    End Function
    

      

  • 相关阅读:
    Redis五种数据类型操作命令
    MySQL单表数据量过千万,采坑优化记录,完美解决方案
    并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)
    Swagger2安装及使用
    MySQL单表多次查询和多表联合查询,哪个效率高?
    Java集合时间复杂度
    JAVA中常见集合的扩容
    ant design vue 之 rowKey浏览器报警告
    ant design vue中表格自带分页如何使用
    ant design vue 中表格的使用中,表格选中之后没有状态
  • 原文地址:https://www.cnblogs.com/briny/p/5211644.html
Copyright © 2020-2023  润新知