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
- SoapObjectReader.cs
- TemplateControlBuildProvider.cs
- FixedSOMTable.cs
- DocumentPageHost.cs
- Oid.cs
- SelectionProviderWrapper.cs
- DocumentViewerBase.cs
- AsymmetricSignatureDeformatter.cs
- SyndicationSerializer.cs
- ComponentDesigner.cs
- XmlSchemaSequence.cs
- MobileTemplatedControlDesigner.cs
- ActiveDocumentEvent.cs
- MexNamedPipeBindingCollectionElement.cs
- ToolStripContentPanelRenderEventArgs.cs
- DataGridTableCollection.cs
- EdmItemCollection.cs
- Currency.cs
- InternalCompensate.cs
- DesignTimeTemplateParser.cs
- _RequestCacheProtocol.cs
- TypeValidationEventArgs.cs
- SafeFileHandle.cs
- VariableBinder.cs
- CustomAttribute.cs
- NavigationPropertySingletonExpression.cs
- BitmapImage.cs
- Stacktrace.cs
- BasicCellRelation.cs
- WebResourceUtil.cs
- PeerName.cs
- CodeTypeDeclaration.cs
- ActivityExecutionFilter.cs
- NextPreviousPagerField.cs
- QuaternionAnimation.cs
- Adorner.cs
- CommandHelper.cs
- AdRotator.cs
- XmlBufferReader.cs
- DataBindEngine.cs
- XsltConvert.cs
- UnsafeNativeMethods.cs
- HtmlLink.cs
- TemplatedAdorner.cs
- DSASignatureFormatter.cs
- ListManagerBindingsCollection.cs
- Single.cs
- TranslateTransform.cs
- UnsafeMethods.cs
- HtmlHead.cs
- ConstrainedDataObject.cs
- SrgsSubset.cs
- ConsoleCancelEventArgs.cs
- ContextInformation.cs
- SiteMapDataSourceView.cs
- DeleteHelper.cs
- WindowsListViewItemStartMenu.cs
- HwndMouseInputProvider.cs
- XmlSchemaObjectTable.cs
- HtmlHead.cs
- HttpHeaderCollection.cs
- XmlUrlResolver.cs
- DropAnimation.xaml.cs
- DetailsViewInsertedEventArgs.cs
- XmlQueryContext.cs
- EntityProxyTypeInfo.cs
- EventToken.cs
- XmlDocumentFragment.cs
- Model3DGroup.cs
- CrossContextChannel.cs
- RoutedEventConverter.cs
- RemoteHelper.cs
- CollectionChangedEventManager.cs
- SortFieldComparer.cs
- DesignTimeTemplateParser.cs
- DataSourceControlBuilder.cs
- WebBrowserPermission.cs
- ServerValidateEventArgs.cs
- BasicHttpMessageSecurityElement.cs
- SqlColumnizer.cs
- ModelItemCollectionImpl.cs
- VoiceInfo.cs
- Model3D.cs
- ScrollData.cs
- ContextMenuAutomationPeer.cs
- PeerResolverBindingElement.cs
- PieceDirectory.cs
- FullTextState.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- ClonableStack.cs
- FormsAuthenticationTicket.cs
- Enlistment.cs
- SoapEnumAttribute.cs
- MinMaxParagraphWidth.cs
- BamlLocalizationDictionary.cs
- InkCollectionBehavior.cs
- DBCommandBuilder.cs
- ConnectionInterfaceCollection.cs
- WasEndpointConfigContainer.cs
- ColumnCollectionEditor.cs