110,571
社区成员
发帖
与我相关
我的任务
分享
//l输入为inMS : MemoryStream
inMS.Seek(0, SeekOrigin.Begin);
DeflateStream ds = DeflateStream(inMS, CompressionMode.Decompress);
var outMS = new MemoryStream();//输出ms
ds.CopyTo(outMS); //此处会报"块的长度与它的补集不匹配"
ds.Close();
ds.Dispose();
Public Function DeCompress(pBytes As Byte()) As Byte()
' Deflate 算法压缩之后的数据,第一个字节是 78h(120b),第二个字节是 DAh(218b)
If pBytes.Length < 2 OrElse
(Not pBytes(0) = 120 AndAlso Not pBytes(1) = 218) Then
Return pBytes
End If
Dim deCompressBytes() As Byte = New Byte() {}
Try
Dim cs As New MemoryStream(pBytes)
' 先读取前两个deflate压缩算法标识字节,然后才能用deflateStream解压
' 这个行为与 zlib库、sharpZiplib库等不同(这些库都是直接传入解压)
cs.ReadByte()
cs.ReadByte()
Dim dms As New MemoryStream()
Using ds As New DeflateStream(cs, CompressionMode.Decompress, False)
ds.CopyTo(dms, 8192)
End Using
deCompressBytes = dms.ToArray()
Catch ex As Exception
throw ex
End Try
Return deCompressBytes
End Function