返回首页

简介
我一直用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文件。

回答

评论会员:Chamadness 时间:2012/01/24
再次尝试 - 下一次更好的代码
评论会员:!尤金Sichkar 时间:2012/01/24
请告诉我,这个代码块意味着什么:
{C}
此外,而不是使用Close方法,你应该使用"()"的格局。

这样的想法是那么容易的,它不值得自己的文章。一般这么多,这么小的代码块
错误