Проблема сжатия GZipStream (потерянный байт)

У меня возникла странная проблема с GZip Serializer.

Попытка сериализации объекта с данными в нем.

Следующий код дает результаты ( в точке POINT1 в отладке ): ms.Length = 100028 и uncompressedStream.Length = 100027

После POINT1 возникает исключение «Конец потока обнаружен до завершения анализа». , что, как мне кажется, является результатом потери байта.

Я использую .net 4.0.

        //generating data
        int length = 100000;
        byte[] data = new byte[length];
        for (int i = 0; i < length; i++)
        {
            data[i] = System.Convert.ToByte(i % 100 + i % 50);
        }


        //serialization into memory stream
        IFormatter formatter = new BinaryFormatter();
        var ms = new MemoryStream();
        formatter.Serialize(ms, data);
        ms.Seek(0, SeekOrigin.Begin);

        //GZip zip
        MemoryStream compressedStream = new MemoryStream();
        var Compress = new GZipStream(compressedStream, CompressionMode.Compress);
        ms.CopyTo(Compress);  
        compressedStream.Seek(0, SeekOrigin.Begin);

        //GZip Unzip
        MemoryStream uncompressedStream = new MemoryStream();
        var Decompress = new GZipStream(compressedStream, CompressionMode.Decompress);
        Decompress.CopyTo(uncompressedStream);
        uncompressedStream.Seek(0, SeekOrigin.Begin);

        //deserialization from memory stream
        //POINT1
        var oo = formatter.Deserialize(uncompressedStream);
        var o = (byte[])oo;

        //checking
        Assert.AreEqual(data.Length, o.Length);
        for (int i = 0; i < data.Length; i++)
            Assert.AreEqual(data[i], o[i]);
9
задан Yfer 13 June 2011 в 18:16
поделиться