Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- XamlReader.cs
- EnvelopedSignatureTransform.cs
- SqlRowUpdatingEvent.cs
- RootAction.cs
- PageThemeParser.cs
- RemotingSurrogateSelector.cs
- XmlSequenceWriter.cs
- OrderByExpression.cs
- ObjectAnimationBase.cs
- CreateRefExpr.cs
- Script.cs
- sapiproxy.cs
- SweepDirectionValidation.cs
- ListViewItemMouseHoverEvent.cs
- SaveFileDialogDesigner.cs
- CodeDirectiveCollection.cs
- RenderingEventArgs.cs
- PropertyChangedEventArgs.cs
- Clause.cs
- MultilineStringEditor.cs
- DbConnectionStringBuilder.cs
- FileSystemWatcher.cs
- XPathBinder.cs
- SerializationAttributes.cs
- AssemblyName.cs
- PasswordRecovery.cs
- SerializationUtility.cs
- ToolStripPanelCell.cs
- AssemblyNameProxy.cs
- HttpEncoderUtility.cs
- UrlMappingsSection.cs
- ReferenceEqualityComparer.cs
- EntryWrittenEventArgs.cs
- IndexedSelectQueryOperator.cs
- PenThread.cs
- CmsInterop.cs
- Stack.cs
- CryptoStream.cs
- RuleSettingsCollection.cs
- TemplateControlCodeDomTreeGenerator.cs
- EventSetterHandlerConverter.cs
- TouchesCapturedWithinProperty.cs
- AsymmetricKeyExchangeFormatter.cs
- AssemblyHash.cs
- Page.cs
- ResXResourceSet.cs
- WorkflowWebHostingModule.cs
- TrackingRecord.cs
- ModuleConfigurationInfo.cs
- SqlDataSourceTableQuery.cs
- UnsafeNativeMethods.cs
- CryptoConfig.cs
- ConfigurationManagerInternalFactory.cs
- NullToBooleanConverter.cs
- SatelliteContractVersionAttribute.cs
- ValidatorCollection.cs
- SelectorItemAutomationPeer.cs
- FixedSOMPageConstructor.cs
- ReachPageContentCollectionSerializerAsync.cs
- DataViewSettingCollection.cs
- PrintDialog.cs
- ProfileBuildProvider.cs
- XmlSiteMapProvider.cs
- httpstaticobjectscollection.cs
- CompositeScriptReference.cs
- ToolStripOverflow.cs
- GlyphCache.cs
- Object.cs
- EventHandlerList.cs
- WasNotInstalledException.cs
- AesManaged.cs
- PolyLineSegmentFigureLogic.cs
- DbTypeMap.cs
- SID.cs
- ExpressionHelper.cs
- Task.cs
- HttpApplicationStateWrapper.cs
- DesignerVerbCollection.cs
- TargetParameterCountException.cs
- CqlParser.cs
- MetaModel.cs
- CompoundFileReference.cs
- SchemaCreator.cs
- GridEntryCollection.cs
- WebPartDescriptionCollection.cs
- ScriptingJsonSerializationSection.cs
- TextTreePropertyUndoUnit.cs
- RecognizedAudio.cs
- ChannelTokenTypeConverter.cs
- LinqTreeNodeEvaluator.cs
- Buffer.cs
- XamlPoint3DCollectionSerializer.cs
- TypeBuilder.cs
- LoadWorkflowByInstanceKeyCommand.cs
- SQLString.cs
- DocumentPageViewAutomationPeer.cs
- QueryAccessibilityHelpEvent.cs
- ParseNumbers.cs
- XmlKeywords.cs
- GregorianCalendarHelper.cs