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
- Variant.cs
- JsonQNameDataContract.cs
- BindingMAnagerBase.cs
- Permission.cs
- UTF32Encoding.cs
- AgileSafeNativeMemoryHandle.cs
- HtmlDocument.cs
- ListCommandEventArgs.cs
- XmlC14NWriter.cs
- WorkflowWebService.cs
- DataBindEngine.cs
- WpfPayload.cs
- DelegatedStream.cs
- FixedTextSelectionProcessor.cs
- cookie.cs
- XmlSyndicationContent.cs
- CombinedGeometry.cs
- SRDisplayNameAttribute.cs
- HttpHandlerActionCollection.cs
- InkCanvasSelection.cs
- AxisAngleRotation3D.cs
- WebHeaderCollection.cs
- XsltArgumentList.cs
- ResXFileRef.cs
- AdapterUtil.cs
- XmlChildNodes.cs
- EventToken.cs
- DetailsViewActionList.cs
- SqlDataSource.cs
- ProcessHostConfigUtils.cs
- DuplicateWaitObjectException.cs
- Overlapped.cs
- TypedElement.cs
- OleDbStruct.cs
- ToolBar.cs
- VariantWrapper.cs
- GregorianCalendarHelper.cs
- SqlRowUpdatingEvent.cs
- TakeQueryOptionExpression.cs
- IISUnsafeMethods.cs
- Identity.cs
- WebEncodingValidatorAttribute.cs
- DocumentSequenceHighlightLayer.cs
- WinFormsSecurity.cs
- CodeNamespace.cs
- DummyDataSource.cs
- WindowPattern.cs
- SessionParameter.cs
- BindingsSection.cs
- WebConfigurationHostFileChange.cs
- ChannelDispatcherBase.cs
- MenuItem.cs
- RawStylusInputCustomData.cs
- OrthographicCamera.cs
- XhtmlBasicLiteralTextAdapter.cs
- MatrixKeyFrameCollection.cs
- DesignerAutoFormat.cs
- GetPageCompletedEventArgs.cs
- DataServiceQueryOfT.cs
- SchemaNotation.cs
- EdmToObjectNamespaceMap.cs
- ObjectSet.cs
- SchemaImporterExtensionElementCollection.cs
- MessageBox.cs
- QuarticEase.cs
- RegistrySecurity.cs
- XmlReaderSettings.cs
- CreateUserErrorEventArgs.cs
- ActivityDesignerAccessibleObject.cs
- SmiTypedGetterSetter.cs
- SoapReflectionImporter.cs
- ExpressionVisitorHelpers.cs
- EFTableProvider.cs
- ellipse.cs
- FtpWebResponse.cs
- CharacterString.cs
- MimeFormatter.cs
- FreeIndexList.cs
- WebZone.cs
- AccessDataSource.cs
- CharUnicodeInfo.cs
- Rules.cs
- METAHEADER.cs
- ObjectDataSourceWizardForm.cs
- HttpWebRequestElement.cs
- WpfWebRequestHelper.cs
- Size.cs
- DependencyProperty.cs
- LineVisual.cs
- Vector3DKeyFrameCollection.cs
- XmlSchemaComplexType.cs
- MsmqAppDomainProtocolHandler.cs
- FrameworkElement.cs
- HttpRequest.cs
- CompleteWizardStep.cs
- FolderBrowserDialogDesigner.cs
- ValidatorCollection.cs
- TextHidden.cs
- CngAlgorithm.cs
- ButtonBase.cs