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
- SqlBulkCopyColumnMappingCollection.cs
- ConfigurationPermission.cs
- CompilerScope.Storage.cs
- OutputCacheModule.cs
- MessageQueueTransaction.cs
- EngineSiteSapi.cs
- FormatControl.cs
- DataGridViewColumnEventArgs.cs
- OdbcConnectionFactory.cs
- BitmapMetadata.cs
- Blend.cs
- EntryIndex.cs
- DocumentGridPage.cs
- TableLayoutStyle.cs
- FacetChecker.cs
- TableLayoutRowStyleCollection.cs
- MenuCommand.cs
- GradientStopCollection.cs
- HttpRequestWrapper.cs
- GroupAggregateExpr.cs
- StructureChangedEventArgs.cs
- DetailsViewCommandEventArgs.cs
- VirtualDirectoryMappingCollection.cs
- ContainerParaClient.cs
- AssemblyBuilderData.cs
- SchemaConstraints.cs
- DurableOperationContext.cs
- TypeDescriptionProviderAttribute.cs
- UnsafeNativeMethodsPenimc.cs
- ClientConfigurationSystem.cs
- BaseAsyncResult.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- FilterEventArgs.cs
- QueryParameter.cs
- PropertyEntry.cs
- XslAstAnalyzer.cs
- CodeDesigner.cs
- DoubleLinkList.cs
- GAC.cs
- CodeGenHelper.cs
- RsaSecurityKey.cs
- AuthStoreRoleProvider.cs
- ListViewPagedDataSource.cs
- SqlTypesSchemaImporter.cs
- SpeakProgressEventArgs.cs
- Input.cs
- AsnEncodedData.cs
- ListDictionaryInternal.cs
- BuildManagerHost.cs
- PeerNameResolver.cs
- StringSorter.cs
- DataRowView.cs
- ConnectionsZoneDesigner.cs
- AppDomainAttributes.cs
- MethodExpr.cs
- ApplicationException.cs
- XLinq.cs
- OciLobLocator.cs
- CalculatedColumn.cs
- WindowsBrush.cs
- MessagePropertyVariants.cs
- Point.cs
- DataGridViewUtilities.cs
- CodeTypeDeclaration.cs
- _ConnectOverlappedAsyncResult.cs
- InputManager.cs
- documentation.cs
- ToRequest.cs
- BatchParser.cs
- EmptyStringExpandableObjectConverter.cs
- JapaneseCalendar.cs
- JournalNavigationScope.cs
- CollectionCodeDomSerializer.cs
- XmlSchemaInfo.cs
- ControlParameter.cs
- SignedPkcs7.cs
- IISUnsafeMethods.cs
- DatasetMethodGenerator.cs
- AnonymousIdentificationModule.cs
- HtmlSelectionListAdapter.cs
- SelectedPathEditor.cs
- ISessionStateStore.cs
- RewritingSimplifier.cs
- ReadingWritingEntityEventArgs.cs
- SqlBinder.cs
- SemaphoreSlim.cs
- RedistVersionInfo.cs
- BeginEvent.cs
- DataContractJsonSerializer.cs
- AccessViolationException.cs
- LoadedOrUnloadedOperation.cs
- MasterPageParser.cs
- XmlSchemaValidator.cs
- SpecialFolderEnumConverter.cs
- printdlgexmarshaler.cs
- Set.cs
- OleDbInfoMessageEvent.cs
- Stack.cs
- Menu.cs
- ToolStripDropDown.cs