Ejemplo n.º 1
0
        private static uint ComputeCrc32FromStream(Stream stream)
        {
            if (!stream.CanSeek)
            {
                throw new ArgumentException("Stream is required to support Seek operations, and does not");
            }
            BufferPool bufferPool = BufferPoolCollection.AutoCleanupCollection.Acquire(ZipEntryAttachment.CopyBufferSize);

            byte[] array = bufferPool.Acquire();
            uint   num   = 0U;

            try
            {
                int bytesToRead;
                while ((bytesToRead = stream.Read(array, 0, array.Length)) > 0)
                {
                    num = ZipEntryAttachment.ComputeCrc32FromBytes(array, bytesToRead, num);
                }
            }
            finally
            {
                if (array != null)
                {
                    bufferPool.Release(array);
                }
            }
            stream.Seek(0L, SeekOrigin.Begin);
            return(num);
        }
Ejemplo n.º 2
0
        private static uint[] CompressAndWriteOutputStream(Stream outputStream, Stream inputStream, bool doComputeCrc)
        {
            if (outputStream == null)
            {
                throw new ArgumentNullException("outputStream");
            }
            if (inputStream == null)
            {
                throw new ArgumentNullException("inputStream");
            }
            uint       num        = 0U;
            int        num2       = 0;
            BufferPool bufferPool = BufferPoolCollection.AutoCleanupCollection.Acquire(ZipEntryAttachment.CopyBufferSize);

            byte[] array = bufferPool.Acquire();
            uint   num3  = 0U;

            using (Stream stream = Streams.CreateTemporaryStorageStream())
            {
                try
                {
                    int num4;
                    using (Stream stream2 = new DeflateStream(stream, CompressionMode.Compress, true))
                    {
                        while ((num4 = inputStream.Read(array, 0, array.Length)) > 0)
                        {
                            if (doComputeCrc)
                            {
                                num3 = ZipEntryAttachment.ComputeCrc32FromBytes(array, num4, num3);
                            }
                            num2 += num4;
                            stream2.Write(array, 0, num4);
                        }
                        stream2.Flush();
                    }
                    stream.Seek(0L, SeekOrigin.Begin);
                    while ((num4 = stream.Read(array, 0, array.Length)) > 0)
                    {
                        outputStream.Write(array, 0, num4);
                        num += (uint)num4;
                    }
                }
                finally
                {
                    if (array != null)
                    {
                        bufferPool.Release(array);
                    }
                }
            }
            return(new uint[]
            {
                num,
                num3,
                (uint)num2
            });
        }