Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / IO / Packaging / DeflateEmulationStream.cs / 1305600 / 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
- XmlSchemaObjectCollection.cs
- GiveFeedbackEventArgs.cs
- Dynamic.cs
- BezierSegment.cs
- Bits.cs
- PersonalizationProvider.cs
- RulePatternOps.cs
- SimpleExpression.cs
- RoleManagerModule.cs
- OleDbMetaDataFactory.cs
- EventWaitHandleSecurity.cs
- ReceiveErrorHandling.cs
- CatalogPart.cs
- DataGridItem.cs
- ListChangedEventArgs.cs
- CachedRequestParams.cs
- remotingproxy.cs
- RegexNode.cs
- WebServiceMethodData.cs
- CellConstantDomain.cs
- SQLByteStorage.cs
- AddingNewEventArgs.cs
- EditorZone.cs
- SelectionListDesigner.cs
- XamlBrushSerializer.cs
- ThreadExceptionEvent.cs
- RefExpr.cs
- CodeGeneratorOptions.cs
- StorageAssociationTypeMapping.cs
- DataGridLengthConverter.cs
- IntegrationExceptionEventArgs.cs
- EncodingNLS.cs
- TypeEnumerableViewSchema.cs
- RequestDescription.cs
- SqlMethodTransformer.cs
- webbrowsersite.cs
- PaperSource.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- ObjectContextServiceProvider.cs
- DependencyPropertyHelper.cs
- GridLengthConverter.cs
- SerializationAttributes.cs
- OleDbConnection.cs
- ButtonBase.cs
- ReferencedType.cs
- OutputCacheSettingsSection.cs
- CodeTypeReference.cs
- DigitalSignatureProvider.cs
- ClientOptions.cs
- PropertyStore.cs
- XmlDocumentFragment.cs
- ChtmlTextWriter.cs
- UnknownWrapper.cs
- ConstructorBuilder.cs
- TreeViewEvent.cs
- ColumnPropertiesGroup.cs
- OutputCacheSection.cs
- Drawing.cs
- XmlSchemaValidationException.cs
- FamilyCollection.cs
- GraphicsPath.cs
- IsolatedStorageFileStream.cs
- HostedHttpTransportManager.cs
- QueryContext.cs
- Transform3D.cs
- ExpressionReplacer.cs
- RandomNumberGenerator.cs
- ObjectListCommandEventArgs.cs
- StringToken.cs
- WebContext.cs
- SocketManager.cs
- DelayDesigner.cs
- BlockUIContainer.cs
- CodeCompileUnit.cs
- ListenerElementsCollection.cs
- PerCallInstanceContextProvider.cs
- GeometryCombineModeValidation.cs
- InkCanvas.cs
- IntSecurity.cs
- DataServiceQuery.cs
- PrintEvent.cs
- CodeEntryPointMethod.cs
- XmlSchemaSimpleTypeRestriction.cs
- SplineKeyFrames.cs
- WebPartCancelEventArgs.cs
- XamlTreeBuilderBamlRecordWriter.cs
- ListBoxChrome.cs
- DuplexChannelFactory.cs
- WebServiceTypeData.cs
- VectorValueSerializer.cs
- ObjectQueryProvider.cs
- AutoScrollHelper.cs
- AccessorTable.cs
- DataGridPageChangedEventArgs.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- SiteMapSection.cs
- SequentialWorkflowRootDesigner.cs
- DataGridViewRowConverter.cs
- JapaneseLunisolarCalendar.cs
- DataRowComparer.cs