Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- FormatSettings.cs
- IisTraceListener.cs
- EntityDataSourceDesignerHelper.cs
- CompiledRegexRunner.cs
- SBCSCodePageEncoding.cs
- XmlSchemaDatatype.cs
- SecurityElement.cs
- Operator.cs
- DataSourceControl.cs
- XmlObjectSerializerWriteContext.cs
- FormatterServices.cs
- GZipStream.cs
- DBDataPermission.cs
- LicenseException.cs
- ListViewContainer.cs
- DoubleAnimation.cs
- SystemIPv4InterfaceProperties.cs
- StagingAreaInputItem.cs
- ThreadSafeList.cs
- PriorityQueue.cs
- Size.cs
- BindingElementExtensionElement.cs
- ErrorFormatter.cs
- XmlArrayItemAttributes.cs
- TabletCollection.cs
- ObjectRef.cs
- TemplateGroupCollection.cs
- AdornerLayer.cs
- MessageLoggingFilterTraceRecord.cs
- MetadataArtifactLoaderComposite.cs
- WinInet.cs
- Mapping.cs
- FormViewDeletedEventArgs.cs
- CompareInfo.cs
- DataBindingHandlerAttribute.cs
- XmlIlVisitor.cs
- RightsManagementPermission.cs
- SqlIdentifier.cs
- Parameter.cs
- RowVisual.cs
- PersistenceContext.cs
- StrokeFIndices.cs
- EncryptedHeader.cs
- ComplexObject.cs
- CheckBoxPopupAdapter.cs
- InvokeHandlers.cs
- ObjectDisposedException.cs
- SmtpNegotiateAuthenticationModule.cs
- ContourSegment.cs
- TimeStampChecker.cs
- TextRenderer.cs
- WebBrowserHelper.cs
- DrawListViewItemEventArgs.cs
- CollectionViewSource.cs
- FieldToken.cs
- PreApplicationStartMethodAttribute.cs
- ContentTypeSettingDispatchMessageFormatter.cs
- TranslateTransform.cs
- X509Utils.cs
- AnimationStorage.cs
- DnsEndpointIdentity.cs
- WSHttpBindingCollectionElement.cs
- DesignBindingValueUIHandler.cs
- WebPartEditorCancelVerb.cs
- ListControl.cs
- XamlReaderHelper.cs
- WebServiceParameterData.cs
- AsnEncodedData.cs
- UriScheme.cs
- DataGridClipboardCellContent.cs
- OdbcTransaction.cs
- XPathException.cs
- XmlCDATASection.cs
- XmlBinaryReader.cs
- BulletChrome.cs
- RequestQueue.cs
- controlskin.cs
- SqlMethodAttribute.cs
- TimersDescriptionAttribute.cs
- AuthenticationManager.cs
- ButtonBaseAdapter.cs
- AddInEnvironment.cs
- Rethrow.cs
- CurrentChangedEventManager.cs
- DataGridViewSelectedCellCollection.cs
- counter.cs
- PathStreamGeometryContext.cs
- SqlUtil.cs
- ProxyWebPartManager.cs
- WebChannelFactory.cs
- LogicalExpr.cs
- DataGridViewCellConverter.cs
- DPCustomTypeDescriptor.cs
- PerformanceCounterPermission.cs
- ListViewItem.cs
- CornerRadius.cs
- VideoDrawing.cs
- List.cs
- PersonalizationStateInfoCollection.cs
- CultureInfoConverter.cs