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
- ContainerFilterService.cs
- SqlFactory.cs
- SqlMethodAttribute.cs
- ShaderEffect.cs
- SolidBrush.cs
- StylusPointPropertyInfoDefaults.cs
- ListCollectionView.cs
- DataSetFieldSchema.cs
- DocumentViewerHelper.cs
- GlobalizationSection.cs
- DBProviderConfigurationHandler.cs
- CompositeDuplexBindingElement.cs
- ForwardPositionQuery.cs
- MemberRelationshipService.cs
- SchemaAttDef.cs
- ObjectQuery_EntitySqlExtensions.cs
- ThreadStateException.cs
- AutoGeneratedField.cs
- TimeSpan.cs
- Evaluator.cs
- EditBehavior.cs
- MappingException.cs
- HttpFileCollection.cs
- Triplet.cs
- StickyNoteContentControl.cs
- PropertyCollection.cs
- SchemaAttDef.cs
- CallContext.cs
- RowTypeElement.cs
- ObjectPersistData.cs
- EdmToObjectNamespaceMap.cs
- ISAPIApplicationHost.cs
- DataRowCollection.cs
- CodeDefaultValueExpression.cs
- Calendar.cs
- UpdateCompiler.cs
- RemotingSurrogateSelector.cs
- ToolboxItemImageConverter.cs
- MetabaseSettings.cs
- CaseInsensitiveComparer.cs
- AutomationEvent.cs
- FileChangeNotifier.cs
- SpecialNameAttribute.cs
- QilReplaceVisitor.cs
- EventLogPermissionEntry.cs
- DeviceFiltersSection.cs
- DataListItemEventArgs.cs
- ThemeDirectoryCompiler.cs
- GetKeyedHashRequest.cs
- ListViewItem.cs
- RadioButtonRenderer.cs
- CompilerTypeWithParams.cs
- IndexerNameAttribute.cs
- ToolboxItemAttribute.cs
- UriTemplateVariableQueryValue.cs
- Padding.cs
- CodeMethodReturnStatement.cs
- VoiceObjectToken.cs
- SystemIcmpV4Statistics.cs
- EmbossBitmapEffect.cs
- CheckBoxAutomationPeer.cs
- DocumentDesigner.cs
- WCFModelStrings.Designer.cs
- StateWorkerRequest.cs
- ObjectItemCollection.cs
- EntityClassGenerator.cs
- File.cs
- ISO2022Encoding.cs
- RemoteArgument.cs
- RsaSecurityTokenAuthenticator.cs
- TextChangedEventArgs.cs
- DirectionalLight.cs
- ellipse.cs
- HostSecurityManager.cs
- HttpRuntimeSection.cs
- Verify.cs
- StylusLogic.cs
- ValueTypePropertyReference.cs
- TabItemAutomationPeer.cs
- HwndHost.cs
- OdbcConnectionString.cs
- Listbox.cs
- ApplicationException.cs
- CornerRadius.cs
- FixedTextContainer.cs
- FontStretch.cs
- SortedList.cs
- ReaderContextStackData.cs
- GraphicsPath.cs
- MessageSecurityProtocolFactory.cs
- SafePointer.cs
- OrderByBuilder.cs
- _ConnectionGroup.cs
- SingleObjectCollection.cs
- CompareInfo.cs
- XmlnsDefinitionAttribute.cs
- GeometryModel3D.cs
- CodeCommentStatement.cs
- TableDetailsCollection.cs
- SessionStateSection.cs