Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Web / System / Web / Services / Protocols / BufferedResponseStream.cs / 1305376 / BufferedResponseStream.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Services.Protocols { using System; using System.IO; using System.Web.Services; internal class BufferedResponseStream : Stream { Stream outputStream; byte[] buffer; int position; bool flushEnabled = true; internal BufferedResponseStream(Stream outputStream, int buffersize) { buffer = new byte[buffersize]; this.outputStream = outputStream; } public override bool CanRead { get { return false; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return true; } } public override long Length { get { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } } public override long Position { get { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } set { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } } protected override void Dispose(bool disposing) { try { if (disposing) outputStream.Close(); } finally { base.Dispose(disposing); } } internal bool FlushEnabled { set { flushEnabled = value; } } public override void Flush() { if (!flushEnabled) return; FlushWrite(); } public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, Object state) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotRead)); } public override int EndRead(IAsyncResult asyncResult) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotRead)); } public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } public override void SetLength(long value) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } public override int Read(byte[] buffer, int offset, int count) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotRead)); } public override int ReadByte() { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotRead)); } public override void Write(byte[] array, int offset, int count) { if (position > 0) { int numBytes = buffer.Length - position; // space left in buffer if (numBytes > 0) { if (numBytes > count) numBytes = count; Array.Copy(array, offset, buffer, position, numBytes); position += numBytes; if (count == numBytes) return; offset += numBytes; count -= numBytes; } FlushWrite(); } // Skip buffer if we have more bytes then will fit in the buffer. if (count >= buffer.Length) { outputStream.Write(array, offset, count); return; } // Copy remaining bytes into buffer, to write at a later date. Array.Copy(array, offset, buffer, position, count); position = count; } private void FlushWrite() { if (position > 0) { outputStream.Write(buffer, 0, position); position = 0; } outputStream.Flush(); } public override void WriteByte(byte value) { if (position == buffer.Length) FlushWrite(); buffer[position++] = value; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Services.Protocols { using System; using System.IO; using System.Web.Services; internal class BufferedResponseStream : Stream { Stream outputStream; byte[] buffer; int position; bool flushEnabled = true; internal BufferedResponseStream(Stream outputStream, int buffersize) { buffer = new byte[buffersize]; this.outputStream = outputStream; } public override bool CanRead { get { return false; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return true; } } public override long Length { get { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } } public override long Position { get { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } set { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } } protected override void Dispose(bool disposing) { try { if (disposing) outputStream.Close(); } finally { base.Dispose(disposing); } } internal bool FlushEnabled { set { flushEnabled = value; } } public override void Flush() { if (!flushEnabled) return; FlushWrite(); } public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, Object state) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotRead)); } public override int EndRead(IAsyncResult asyncResult) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotRead)); } public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } public override void SetLength(long value) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotSeek)); } public override int Read(byte[] buffer, int offset, int count) { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotRead)); } public override int ReadByte() { throw new NotSupportedException(Res.GetString(Res.StreamDoesNotRead)); } public override void Write(byte[] array, int offset, int count) { if (position > 0) { int numBytes = buffer.Length - position; // space left in buffer if (numBytes > 0) { if (numBytes > count) numBytes = count; Array.Copy(array, offset, buffer, position, numBytes); position += numBytes; if (count == numBytes) return; offset += numBytes; count -= numBytes; } FlushWrite(); } // Skip buffer if we have more bytes then will fit in the buffer. if (count >= buffer.Length) { outputStream.Write(array, offset, count); return; } // Copy remaining bytes into buffer, to write at a later date. Array.Copy(array, offset, buffer, position, count); position = count; } private void FlushWrite() { if (position > 0) { outputStream.Write(buffer, 0, position); position = 0; } outputStream.Flush(); } public override void WriteByte(byte value) { if (position == buffer.Length) FlushWrite(); buffer[position++] = value; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ChangePassword.cs
- TimeStampChecker.cs
- ComPlusInstanceContextInitializer.cs
- StateMachine.cs
- HttpCapabilitiesEvaluator.cs
- CodeExporter.cs
- Socket.cs
- SqlVisitor.cs
- ScriptRegistrationManager.cs
- ProtocolsSection.cs
- FixedSOMTextRun.cs
- WinEventWrap.cs
- RequestValidator.cs
- ServiceThrottle.cs
- TextDecorationCollectionConverter.cs
- SortedList.cs
- SignalGate.cs
- CompilationLock.cs
- WizardStepBase.cs
- ImageListStreamer.cs
- CompositionTarget.cs
- SqlNodeTypeOperators.cs
- ZoomPercentageConverter.cs
- CookieHandler.cs
- RegistrationServices.cs
- ParameterCollection.cs
- CreateUserWizard.cs
- HttpClientCertificate.cs
- XmlBindingWorker.cs
- SchemaObjectWriter.cs
- _CookieModule.cs
- GeneralTransform3D.cs
- CodePropertyReferenceExpression.cs
- ContentElementCollection.cs
- AsymmetricAlgorithm.cs
- ImageListUtils.cs
- SystemIcmpV4Statistics.cs
- IxmlLineInfo.cs
- DefaultSerializationProviderAttribute.cs
- TreeNodeStyleCollectionEditor.cs
- ObservableCollection.cs
- BoolExpressionVisitors.cs
- DetailsViewPagerRow.cs
- DataSourceSerializationException.cs
- CharacterMetrics.cs
- ObjectViewFactory.cs
- MasterPageParser.cs
- ComponentChangingEvent.cs
- itemelement.cs
- DomainConstraint.cs
- OdbcHandle.cs
- Rect3D.cs
- PeerToPeerException.cs
- PageEventArgs.cs
- StackSpiller.Bindings.cs
- RowUpdatingEventArgs.cs
- PictureBox.cs
- InlineObject.cs
- WindowInteractionStateTracker.cs
- ProfileSection.cs
- Parser.cs
- iisPickupDirectory.cs
- XPathDocumentNavigator.cs
- CodeDirectiveCollection.cs
- ExpressionPrefixAttribute.cs
- DataServiceException.cs
- ProviderCommandInfoUtils.cs
- ApplicationSettingsBase.cs
- SafeNativeMethods.cs
- ConfigurationLockCollection.cs
- QilTernary.cs
- ContainerControlDesigner.cs
- DrawingGroup.cs
- MonthChangedEventArgs.cs
- CannotUnloadAppDomainException.cs
- DataGridViewSortCompareEventArgs.cs
- ServiceObjectContainer.cs
- DesignerVerbCollection.cs
- BitmapMetadataBlob.cs
- Drawing.cs
- FaultContext.cs
- RoleGroupCollection.cs
- IArgumentProvider.cs
- VectorValueSerializer.cs
- PageParserFilter.cs
- Statements.cs
- DSASignatureDeformatter.cs
- XmlHierarchicalEnumerable.cs
- Attributes.cs
- ExpressionPrefixAttribute.cs
- ColumnWidthChangedEvent.cs
- AssemblyBuilder.cs
- UDPClient.cs
- ContextQuery.cs
- QuaternionIndependentAnimationStorage.cs
- ObjectListTitleAttribute.cs
- Baml2006Reader.cs
- NameValuePair.cs
- XmlObjectSerializerContext.cs
- PersistenceTypeAttribute.cs