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); }
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 }); }