Exemplo n.º 1
0
        /// <summary>
        /// Comprueba si el stream esta en formato ZLib
        /// </summary>
        /// <param name="stream">Stream a comprobar</param>
        /// <returns>Retorna True en caso de que el stream sea en formato ZLib y False en caso contrario u error</returns>
        public static bool IsZLibStream(Stream stream)
        {
            bool       bResult = false;
            int        CMF     = 0;
            int        Flag    = 0;
            ZlibHeader header;

            //Comprobamos si la secuencia esta en la posición 0, de no ser así, lanzamos una excepción
            if (stream.Position != 0)
            {
                throw new ArgumentOutOfRangeException("Sequence must be at position 0");
            }

            //Comprobamos si podemos realizar la lectura de los dos bytes que conforman la cabecera
            if (stream.CanRead == true)
            {
                CMF  = stream.ReadByte();
                Flag = stream.ReadByte();
                try
                {
                    header  = ZlibHeader.DecodeHeader(CMF, Flag);
                    bResult = header.IsSupportedZLibStream;
                }
                catch
                {
                    //Nada
                }
            }

            return(bResult);
        }
        public static ZlibHeader DecodeHeader(int pCMF, int pFlag)
        {
            var result = new ZlibHeader();

			//Ensure that parameters are bytes
			pCMF = pCMF & 0x0FF;
			pFlag = pFlag & 0x0FF;

			//Decode bytes
			result.CompressionInfo = Convert.ToByte((pCMF & 0xF0) >> 4);
			result.CompressionMethod = Convert.ToByte(pCMF & 0x0F);

			result.FCheck = Convert.ToByte(pFlag & 0x1F);
			result.FDict = Convert.ToBoolean(Convert.ToByte((pFlag & 0x20) >> 5));
			result.FLevel = (FLevel)Convert.ToByte((pFlag & 0xC0) >> 6);

			result.IsSupportedZLibStream = (result.CompressionMethod == 8) && (result.CompressionInfo == 7) && (((pCMF * 256 + pFlag) % 31 == 0)) && (result.FDict == false);

            return result;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Inicializa el encabezado del stream en formato ZLib
        /// </summary>
        private void InicializarZLibHeader()
        {
            byte[] bytesHeader;

            //Establecemos la configuración de la cabecera
            var header = new ZlibHeader
            {
                CompressionMethod = 8,    //Deflate
                CompressionInfo   = 7,
                FDict             = false //Sin diccionario
            };

            switch (this.mCompressionLevel)
            {
            case CompressionLevel.NoCompression:
            {
                header.FLevel = FLevel.Faster;
                break;
            }

            case CompressionLevel.Fastest:
            {
                header.FLevel = FLevel.Default;
                break;
            }

            case CompressionLevel.Optimal:
            {
                header.FLevel = FLevel.Optimal;
                break;
            }
            }

            bytesHeader = header.EncodeZlibHeader();

            this.mRawStream.WriteByte(bytesHeader[0]);
            this.mRawStream.WriteByte(bytesHeader[1]);
        }