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
- OdbcReferenceCollection.cs
- ScriptingProfileServiceSection.cs
- PageParserFilter.cs
- OleDbException.cs
- DocumentPage.cs
- DefaultMemberAttribute.cs
- MethodBuilder.cs
- TextureBrush.cs
- GroupDescription.cs
- CollaborationHelperFunctions.cs
- ObjectDataSourceDisposingEventArgs.cs
- TabRenderer.cs
- IndicShape.cs
- NumericUpDownAcceleration.cs
- XmlBinaryReader.cs
- InputLanguageEventArgs.cs
- SymDocumentType.cs
- OracleCommand.cs
- InvalidCardException.cs
- ResponseBodyWriter.cs
- FormViewDeleteEventArgs.cs
- AccessViolationException.cs
- DbMetaDataCollectionNames.cs
- TrustDriver.cs
- ProfileEventArgs.cs
- SchemaContext.cs
- ContainerControl.cs
- PropertyRecord.cs
- ToolboxComponentsCreatingEventArgs.cs
- DeploymentSection.cs
- EmbeddedMailObjectsCollection.cs
- CommandBindingCollection.cs
- TypeName.cs
- Registry.cs
- MulticastOption.cs
- SecurityElement.cs
- RelatedImageListAttribute.cs
- DelegateSerializationHolder.cs
- ThicknessKeyFrameCollection.cs
- NavigationWindowAutomationPeer.cs
- SequentialOutput.cs
- XamlContextStack.cs
- mediaeventshelper.cs
- TimerElapsedEvenArgs.cs
- FilterQueryOptionExpression.cs
- PtsHost.cs
- Geometry3D.cs
- RegexCapture.cs
- SAPIEngineTypes.cs
- WindowsListViewSubItem.cs
- ProcessHostConfigUtils.cs
- SapiRecognizer.cs
- ToolStripItem.cs
- ElementMarkupObject.cs
- LinqToSqlWrapper.cs
- DataGridViewCellStyleConverter.cs
- DataGridViewRow.cs
- ClosableStream.cs
- Enlistment.cs
- UInt64Storage.cs
- RestHandler.cs
- PasswordTextNavigator.cs
- TypeAccessException.cs
- WinFormsUtils.cs
- AlignmentXValidation.cs
- PropertyIdentifier.cs
- SessionIDManager.cs
- FontCacheUtil.cs
- MsmqReceiveHelper.cs
- WebMessageBodyStyleHelper.cs
- ContentFileHelper.cs
- ObservableDictionary.cs
- RectangleGeometry.cs
- CompoundFileReference.cs
- _ChunkParse.cs
- DataError.cs
- BinaryWriter.cs
- ServiceMemoryGates.cs
- RouteUrlExpressionBuilder.cs
- SHA384Managed.cs
- SerialReceived.cs
- InputReport.cs
- CookieParameter.cs
- JobDuplex.cs
- VolatileEnlistmentState.cs
- DataGridItem.cs
- SafeFileMappingHandle.cs
- XpsManager.cs
- DataGridViewColumnStateChangedEventArgs.cs
- MethodToken.cs
- DefinitionBase.cs
- MulticastDelegate.cs
- DocumentOrderQuery.cs
- HtmlHead.cs
- Stylus.cs
- Base64Encoder.cs
- DefaultValidator.cs
- Literal.cs
- RightsManagementEncryptedStream.cs
- HostedElements.cs