Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlIterators.cs
- MapPathBasedVirtualPathProvider.cs
- FileDialog_Vista.cs
- XmlSchemaNotation.cs
- MorphHelper.cs
- BooleanSwitch.cs
- WindowsImpersonationContext.cs
- InternalPolicyElement.cs
- SqlParameter.cs
- SafeArrayRankMismatchException.cs
- LinkLabel.cs
- InfoCardX509Validator.cs
- SqlRetyper.cs
- CannotUnloadAppDomainException.cs
- XmlIlTypeHelper.cs
- DummyDataSource.cs
- cryptoapiTransform.cs
- BitmapCodecInfoInternal.cs
- MouseActionValueSerializer.cs
- WebErrorHandler.cs
- SmiContext.cs
- UpdatePanelControlTrigger.cs
- TraceLevelHelper.cs
- Util.cs
- _CacheStreams.cs
- AddingNewEventArgs.cs
- DataBinder.cs
- XmlDataSourceView.cs
- SpStreamWrapper.cs
- NumberEdit.cs
- RayMeshGeometry3DHitTestResult.cs
- ForwardPositionQuery.cs
- StrokeDescriptor.cs
- IMembershipProvider.cs
- BaseEntityWrapper.cs
- FormattedTextSymbols.cs
- _FtpDataStream.cs
- TrackingAnnotationCollection.cs
- HostedElements.cs
- WeakHashtable.cs
- HttpRequestWrapper.cs
- CodeConditionStatement.cs
- DataGridViewRowConverter.cs
- X509Extension.cs
- GraphicsPath.cs
- rsa.cs
- TreeViewAutomationPeer.cs
- X509ChainPolicy.cs
- wmiprovider.cs
- EventLogStatus.cs
- RefreshInfo.cs
- HtmlInputPassword.cs
- NameValuePermission.cs
- Preprocessor.cs
- FacetValueContainer.cs
- DataReceivedEventArgs.cs
- AddingNewEventArgs.cs
- HMACMD5.cs
- ServiceProviders.cs
- OutputCacheModule.cs
- WebSysDescriptionAttribute.cs
- SpecialNameAttribute.cs
- CompareValidator.cs
- GridViewColumnHeaderAutomationPeer.cs
- FileNotFoundException.cs
- UriExt.cs
- BitmapEffect.cs
- FormsAuthenticationConfiguration.cs
- FormViewDeleteEventArgs.cs
- SettingsSavedEventArgs.cs
- AnimationStorage.cs
- DataContractSerializer.cs
- FormViewModeEventArgs.cs
- Privilege.cs
- EventItfInfo.cs
- AutomationAttributeInfo.cs
- TreeViewAutomationPeer.cs
- HttpCapabilitiesSectionHandler.cs
- ScriptModule.cs
- ObjectParameterCollection.cs
- PropertyAccessVisitor.cs
- MetaTable.cs
- QueryLifecycle.cs
- UniformGrid.cs
- Int64.cs
- SecurityTokenReferenceStyle.cs
- DBConnectionString.cs
- HiddenFieldPageStatePersister.cs
- StrokeFIndices.cs
- recordstate.cs
- NumericPagerField.cs
- WindowsSpinner.cs
- sqlser.cs
- LineServices.cs
- RelationalExpressions.cs
- Int64AnimationUsingKeyFrames.cs
- BitmapEffectGroup.cs
- WebRequestModuleElementCollection.cs
- printdlgexmarshaler.cs
- HttpHeaderCollection.cs