简介
我一直用gzip文件,需要一个可靠的方式读入一个正确的字节大小数组流。我研究了一些MSDN说做什么,并摸索出一套解决问题的办法。问题是MSDN不设置数组的大小,并使用了4086字节的默认大小。我解压缩的文件,有些是远远超过这一数额,所以我看了一个gzip的RFC(RFC 1952),并想出用下面的代码。背景
在我写的程序,是对我们的代码来控制,我们为每个项目分配的内存量。其基本思想是只分配,你需要的内存量,而这又回到了我的非托管编码天。使用代码
,而不是创造了巨大的字节数组,并猜测什么实际的大小将的,我们可以解析压缩字节,并使用ConvertBit获得最后4位,并获得解压缩后的大小。我使用的代码包裹在头的消息,所以这就是为什么我使用的变量开始偏移的数据,这是我的GZIP数据开始。这相当简单的代码,只是传递的功能和字节数组的起始索引,将手背解压缩文件。
兴趣点/// <summary>
/// Method is used to decompress Gzip files.
/// </summary>
/// <param name="data">Compressed Data</param>
/// <param name="start">Start index of compressed Data</param>
/// <returns>Uncompressed Data in Byte Array</returns>
public static byte[] HandleGzipMessage(byte[] data, int start)
{
MemoryStream memStream;
int size = BitConverter.ToInt32(data, data.Length - 4);
byte[] uncompressedData = new byte[size];
memStream = new MemoryStream(data, start, (data.Length - start));
memStream.Position = 0;
GZipStream gzStream = new GZipStream(memStream, CompressionMode.Decompress);
try
{
gzStream.Read(uncompressedData, 0, size);
}
catch(Exception gzError)
{
throw gzError;
}
gzStream.Close();
return uncompressedData;
}
我希望这可以帮助别人,用gzip文件。