c# 用Zlib 分片解码Gzip包

byte[] readBuffer = new byte[10240];
int bytesRead = -1;
Ionic.Zlib.GZipStream zipStream = new Ionic.Zlib.GZipStream(mStream,Ionic.Zlib.CompressionMode.Decompress,true);
zipStream.FlushMode = FlushType.Partial;
//Ionic.Zlib.DeflateStream zlib = new Ionic.Zlib.DeflateStream(mStream, CompressionMode.Decompress);
//zlib.Write();


long pos =0;

while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
mStream.Seek(0, SeekOrigin.End);
mStream.Write(readBuffer, 0, bytesRead);
mStream.Position = pos;

//todo写数据时 需要重置zipStream里面的状态把nomoreinput 设置为true

Byte[] buffer = null;
byte[] buffer1 = new byte[0x4000];
using (MemoryStream output = new MemoryStream())
{
int read = 0;

while ((read = zipStream.Read(buffer1, 0, buffer1.Length)) > 0)
{
output.Write(buffer1, 0, read);
}

buffer = output.ToArray();
}

pos = mStream.Position;

if (null == buffer)
continue;

if (m_pageData == null)
{
m_pageData = new byte[buffer.Length];
Array.Copy(buffer, m_pageData, buffer.Length);
}
else
{
byte[] tmp = new byte[m_pageData.Length + buffer.Length];
Array.Copy(m_pageData, tmp, m_pageData.Length);
Array.Copy(buffer, 0, tmp, m_pageData.Length, buffer.Length);
m_pageData = tmp;
}
}

posted on 2013-09-02 15:20  tanglaoya321  阅读(861)  评论(0)    收藏  举报