' 發展單位:風禹科技驗證有限公司 ' 撰寫人:鄭子璉(Tzu-Lien, Cheng, 璉璉) ,成大水利博肄,微軟最有價值專家 ' Web: http://tlcheng.twbbs.org/TLCheng/ E-Mail: qvb3377@ms5.hinet.net ' -------------------------------------------------------------------------------------- Public Module modCompressTools Public Function MyGZipCompress(ByVal objValue As Object, Optional ByVal bBigEndian As Boolean = False) As Byte() Return MyGZipCompressBytes(ObjectToByte(objValue, bBigEndian)) End Function Public Function MyGZipCompressBytes(ByVal arrBytes As Byte()) As Byte() Dim memStream As New IO.MemoryStream() Dim gzipStream As New IO.Compression.GZipStream(memStream, IO.Compression.CompressionMode.Compress, True) With gzipStream .Write(arrBytes, 0, arrBytes.Length) .Close() End With Dim outBytes As Byte() = memStream.ToArray Return outBytes End Function Public Function MyGZipDeCompressBytes(ByVal arrBytes As Byte()) As Byte() Dim memStream As New IO.MemoryStream(arrBytes) Dim gzipStream As New IO.Compression.GZipStream(memStream, IO.Compression.CompressionMode.Decompress) Dim outBytes As Byte() = ReadAllBytesFromStream(gzipStream) gzipStream.Close() Return outBytes End Function Public Function MyGZipDeCompress(ByVal objValue As Object, Optional ByVal nVarType As VariantType = VariantType.Array Or VariantType.Byte, Optional ByVal bBigEndian As Boolean = False) As Object Return ByteToVariant(MyGZipDeCompressBytes(ObjectToByte(objValue)), nVarType, bBigEndian) End Function Private Function ReadAllBytesFromStream(ByVal srcStream As IO.Stream, Optional ByVal nBuffer As Integer = 32768) As Byte() Dim allBytes, nBytes As Integer Dim rtnBytes As Byte() Dim arrBuffer(nBuffer - 1) As Byte allBytes = -1 ReDim rtnBytes(allBytes) Do Try nBytes = srcStream.Read(arrBuffer, 0, nBuffer) Catch nBytes = 0 End Try If nBytes > 0 Then allBytes += nBytes ReDim Preserve rtnBytes(allBytes) Array.Copy(arrBuffer, 0, rtnBytes, allBytes - nBytes + 1, nBytes) Else Exit Do End If Loop Return rtnBytes End Function End Module