Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Base / MS / Internal / IO / Packaging / DeflateEmulationStream.cs / 1 / DeflateEmulationStream.cs
//------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // Implementation of a helper class that provides a fully functional Stream on a restricted functionality // Compression stream (System.IO.Compression.DeflateStream). // // History: // 10/05/2005: BruceMac: Split out from CompressEmulationStream //----------------------------------------------------------------------------- using System; using System.IO; using System.IO.Compression; // for DeflateStream using System.Diagnostics; using System.IO.Packaging; using System.Windows; namespace MS.Internal.IO.Packaging { //----------------------------------------------------- // // Internal Members // //----------------------------------------------------- ////// Emulates a fully functional stream using restricted functionality DeflateStream /// internal class DeflateEmulationTransform : IDeflateTransform { ////// Extract from DeflateStream to temp stream /// ///Caller is responsible for correctly positioning source and sink stream pointers before calling. public void Decompress(Stream source, Stream sink) { // for non-empty stream create deflate stream that can // actually decompress using (DeflateStream deflateStream = new DeflateStream( source, // source of compressed data CompressionMode.Decompress, // compress or decompress true)) // leave base stream open when the deflate stream is closed { int bytesRead = 0; do { bytesRead = deflateStream.Read(Buffer, 0, Buffer.Length); if (bytesRead > 0) sink.Write(Buffer, 0, bytesRead); } while (bytesRead > 0); } } ////// Compress from the temp stream into the base stream /// ///Caller is responsible for correctly positioning source and sink stream pointers before calling. public void Compress(Stream source, Stream sink) { // create deflate stream that can actually compress or decompress using (DeflateStream deflateStream = new DeflateStream( sink, // destination for compressed data CompressionMode.Compress, // compress or decompress true)) // leave base stream open when the deflate stream is closed { // persist to deflated stream from working stream int bytesRead = 0; do { bytesRead = source.Read(Buffer, 0, Buffer.Length); if (bytesRead > 0) deflateStream.Write(Buffer, 0, bytesRead); } while (bytesRead > 0); } // truncate if necessary and possible if (sink.CanSeek) sink.SetLength(sink.Position); } //------------------------------------------------------ // // Private Properties // //----------------------------------------------------- private byte[] Buffer { get { if (_buffer == null) _buffer = new byte[0x1000]; // 4k return _buffer; } } //------------------------------------------------------ // // Private Members // //------------------------------------------------------ private byte[] _buffer; // alloc and re-use to reduce memory fragmentation // this is safe because we are not thread-safe } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // Implementation of a helper class that provides a fully functional Stream on a restricted functionality // Compression stream (System.IO.Compression.DeflateStream). // // History: // 10/05/2005: BruceMac: Split out from CompressEmulationStream //----------------------------------------------------------------------------- using System; using System.IO; using System.IO.Compression; // for DeflateStream using System.Diagnostics; using System.IO.Packaging; using System.Windows; namespace MS.Internal.IO.Packaging { //----------------------------------------------------- // // Internal Members // //----------------------------------------------------- ////// Emulates a fully functional stream using restricted functionality DeflateStream /// internal class DeflateEmulationTransform : IDeflateTransform { ////// Extract from DeflateStream to temp stream /// ///Caller is responsible for correctly positioning source and sink stream pointers before calling. public void Decompress(Stream source, Stream sink) { // for non-empty stream create deflate stream that can // actually decompress using (DeflateStream deflateStream = new DeflateStream( source, // source of compressed data CompressionMode.Decompress, // compress or decompress true)) // leave base stream open when the deflate stream is closed { int bytesRead = 0; do { bytesRead = deflateStream.Read(Buffer, 0, Buffer.Length); if (bytesRead > 0) sink.Write(Buffer, 0, bytesRead); } while (bytesRead > 0); } } ////// Compress from the temp stream into the base stream /// ///Caller is responsible for correctly positioning source and sink stream pointers before calling. public void Compress(Stream source, Stream sink) { // create deflate stream that can actually compress or decompress using (DeflateStream deflateStream = new DeflateStream( sink, // destination for compressed data CompressionMode.Compress, // compress or decompress true)) // leave base stream open when the deflate stream is closed { // persist to deflated stream from working stream int bytesRead = 0; do { bytesRead = source.Read(Buffer, 0, Buffer.Length); if (bytesRead > 0) deflateStream.Write(Buffer, 0, bytesRead); } while (bytesRead > 0); } // truncate if necessary and possible if (sink.CanSeek) sink.SetLength(sink.Position); } //------------------------------------------------------ // // Private Properties // //----------------------------------------------------- private byte[] Buffer { get { if (_buffer == null) _buffer = new byte[0x1000]; // 4k return _buffer; } } //------------------------------------------------------ // // Private Members // //------------------------------------------------------ private byte[] _buffer; // alloc and re-use to reduce memory fragmentation // this is safe because we are not thread-safe } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StylusDevice.cs
- ElementAction.cs
- DataGridViewComboBoxColumn.cs
- OperationInfo.cs
- NativeActivityAbortContext.cs
- FindCriteria11.cs
- FileLogRecord.cs
- EqualityArray.cs
- ProcessHostServerConfig.cs
- BlockUIContainer.cs
- TraceHandlerErrorFormatter.cs
- DataBoundControl.cs
- HtmlContainerControl.cs
- ControlBuilderAttribute.cs
- hwndwrapper.cs
- BindingCollection.cs
- ReservationCollection.cs
- Main.cs
- StringKeyFrameCollection.cs
- DataTableReaderListener.cs
- DictionaryEntry.cs
- DefaultObjectMappingItemCollection.cs
- SessionIDManager.cs
- RowTypePropertyElement.cs
- ObjectViewListener.cs
- DependencyProperty.cs
- EventToken.cs
- ContextStaticAttribute.cs
- PeerApplicationLaunchInfo.cs
- SqlDependencyUtils.cs
- DataException.cs
- SrgsDocumentParser.cs
- FixedSOMTableRow.cs
- PropertyMapper.cs
- CopyNamespacesAction.cs
- IndentTextWriter.cs
- EventLogger.cs
- TypedDataSetSchemaImporterExtension.cs
- MailWebEventProvider.cs
- QuaternionAnimationBase.cs
- DefaultMergeHelper.cs
- MappingModelBuildProvider.cs
- FixedSOMPage.cs
- MultiPageTextView.cs
- MaterialGroup.cs
- IgnoreFlushAndCloseStream.cs
- ObjectViewListener.cs
- ImageInfo.cs
- coordinator.cs
- ScrollItemProviderWrapper.cs
- Cursors.cs
- UnauthorizedWebPart.cs
- NullToBooleanConverter.cs
- MultilineStringConverter.cs
- SafeArrayRankMismatchException.cs
- _LazyAsyncResult.cs
- ChangeNode.cs
- Utilities.cs
- SecurityElement.cs
- PersonalizationDictionary.cs
- NavigationWindowAutomationPeer.cs
- StretchValidation.cs
- SoapInteropTypes.cs
- TextDpi.cs
- Timer.cs
- SHA1.cs
- Inline.cs
- HttpClientChannel.cs
- Point3DCollectionValueSerializer.cs
- ConfigXmlAttribute.cs
- ValueExpressions.cs
- XPathAncestorIterator.cs
- OperationCanceledException.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- CapabilitiesAssignment.cs
- WindowsGraphics2.cs
- OdbcInfoMessageEvent.cs
- Item.cs
- EventData.cs
- WaitForChangedResult.cs
- ContentDefinition.cs
- DelegateHelpers.Generated.cs
- EditorPartCollection.cs
- LineSegment.cs
- ResizeGrip.cs
- DbConnectionInternal.cs
- TransformedBitmap.cs
- RichTextBoxContextMenu.cs
- XamlReader.cs
- MenuItem.cs
- DataGridColumn.cs
- InfocardExtendedInformationCollection.cs
- AnnouncementEventArgs.cs
- ZoneButton.cs
- DownloadProgressEventArgs.cs
- ObjectQueryExecutionPlan.cs
- DelegatingConfigHost.cs
- MultiDataTrigger.cs
- FontFamily.cs
- Aggregates.cs