Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- ClientBuildManager.cs
- TextTreeTextElementNode.cs
- FlowPanelDesigner.cs
- ContentTypeSettingDispatchMessageFormatter.cs
- WaitForChangedResult.cs
- CalendarDay.cs
- SourceElementsCollection.cs
- ToolStripItemRenderEventArgs.cs
- DefaultValueTypeConverter.cs
- Buffer.cs
- PermissionToken.cs
- PresentationAppDomainManager.cs
- InternalBufferOverflowException.cs
- RequestStatusBarUpdateEventArgs.cs
- WizardForm.cs
- BatchParser.cs
- AutoSizeComboBox.cs
- SyndicationContent.cs
- ProfilePropertySettings.cs
- SemaphoreSecurity.cs
- GlobalEventManager.cs
- AttributeUsageAttribute.cs
- StrongNameIdentityPermission.cs
- TypeBuilder.cs
- DataProtection.cs
- ScaleTransform.cs
- SchemaComplexType.cs
- BufferedGraphicsContext.cs
- ControlPaint.cs
- BuildResultCache.cs
- StylusPointPropertyId.cs
- coordinator.cs
- DisplayMemberTemplateSelector.cs
- TextSimpleMarkerProperties.cs
- HttpCacheVary.cs
- SQLBinaryStorage.cs
- RowParagraph.cs
- OleDbReferenceCollection.cs
- ComponentCommands.cs
- WmlSelectionListAdapter.cs
- SplayTreeNode.cs
- QilDataSource.cs
- ConvertEvent.cs
- ListViewContainer.cs
- Axis.cs
- URLMembershipCondition.cs
- TranslateTransform3D.cs
- TypeConstant.cs
- SpecialNameAttribute.cs
- TextureBrush.cs
- ToolBarOverflowPanel.cs
- WindowsSecurityTokenAuthenticator.cs
- EdmError.cs
- CodeGenerator.cs
- DotExpr.cs
- RightNameExpirationInfoPair.cs
- HttpCookieCollection.cs
- Sql8ConformanceChecker.cs
- ExecutionEngineException.cs
- BinaryWriter.cs
- ControlBuilderAttribute.cs
- HashUtility.cs
- FileUtil.cs
- HScrollBar.cs
- BinHexDecoder.cs
- SurrogateEncoder.cs
- SystemEvents.cs
- uribuilder.cs
- RelatedImageListAttribute.cs
- UIElement.cs
- MatrixAnimationUsingPath.cs
- LinkDescriptor.cs
- CultureSpecificStringDictionary.cs
- StrokeDescriptor.cs
- Interlocked.cs
- GridViewCellAutomationPeer.cs
- _AutoWebProxyScriptWrapper.cs
- Clock.cs
- SimpleType.cs
- KerberosTicketHashIdentifierClause.cs
- ColumnHeaderConverter.cs
- WebPartCollection.cs
- EntityDataSourceReferenceGroup.cs
- WindowsStatusBar.cs
- SegmentTree.cs
- LexicalChunk.cs
- ImageButton.cs
- SoapElementAttribute.cs
- ToolStripItemClickedEventArgs.cs
- BindingListCollectionView.cs
- iisPickupDirectory.cs
- PageAdapter.cs
- BadImageFormatException.cs
- DataSourceXmlSubItemAttribute.cs
- QueueAccessMode.cs
- ContextMenuAutomationPeer.cs
- DataBindingList.cs
- ConsumerConnectionPoint.cs
- InstanceNotReadyException.cs
- PropertyEntry.cs