8,735
社区成员
发帖
与我相关
我的任务
分享
public byte[] Decompress(byte[] Data)
{
try {
int offset = 0;
if (((Data.Length > 2) && ((Data[0] & 15) == 8)) && (((Data[0] & 0x80) == 0) && ((((Data[0] << 8) + Data[1]) % 0x1f) == 0)))
{
offset = 2;
}
byte[] bData=new byte[Data.Length -offset];
int i=0;
for (i = 0; i < Data.Length - offset; i++)
{
bData[i] = Data[offset + i];
}
MemoryStream ms = new MemoryStream();
ms.Write(bData, 0, bData.Length);
ms.Position = 0;
DeflateStream stream = new DeflateStream(ms, CompressionMode.Decompress, true);
byte[] buffer = new byte[4096];
MemoryStream temp = new MemoryStream();
int read = stream.Read(buffer, 0, buffer.Length);
while (read > 0)
{
temp.Write(buffer, 0, read);
read = stream.Read(buffer, 0, buffer.Length);
}
//必须把stream流关闭才能返回ms流数据,不然数据会不完整
stream.Close();
stream.Dispose();
ms.Close();
ms.Dispose();
bData = temp.ToArray();
temp.Close();
temp.Dispose();
return bData;
}
catch{
return Encoding.UTF8.GetBytes(@"无法解码,Inflate:ydecompress()");
}