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
- KoreanLunisolarCalendar.cs
- Row.cs
- JavaScriptString.cs
- XmlRawWriter.cs
- HttpConfigurationSystem.cs
- ShapeTypeface.cs
- CompositionTarget.cs
- XpsLiterals.cs
- XmlDocumentType.cs
- DataGridCommandEventArgs.cs
- EUCJPEncoding.cs
- FormViewRow.cs
- ForceCopyBuildProvider.cs
- AssemblyContextControlItem.cs
- PartitionResolver.cs
- MailWebEventProvider.cs
- PageBuildProvider.cs
- Line.cs
- CompareValidator.cs
- XmlChoiceIdentifierAttribute.cs
- HtmlInputSubmit.cs
- CorrelationActionMessageFilter.cs
- IriParsingElement.cs
- NavigationPropertySingletonExpression.cs
- OrderByLifter.cs
- Socket.cs
- ListViewItemMouseHoverEvent.cs
- C14NUtil.cs
- RbTree.cs
- AccessibleObject.cs
- EntitySqlQueryState.cs
- ColorTransformHelper.cs
- TransferRequestHandler.cs
- NoResizeSelectionBorderGlyph.cs
- RelOps.cs
- SafeThreadHandle.cs
- ValidationEventArgs.cs
- SymmetricKey.cs
- COMException.cs
- CodeNamespaceImportCollection.cs
- DataListItemCollection.cs
- ProtectedConfigurationSection.cs
- CompositeCollection.cs
- ServiceSettingsResponseInfo.cs
- GridViewCommandEventArgs.cs
- SchemaNotation.cs
- util.cs
- Calendar.cs
- GenerateScriptTypeAttribute.cs
- SqlProcedureAttribute.cs
- SatelliteContractVersionAttribute.cs
- StringPropertyBuilder.cs
- DataGridAddNewRow.cs
- FixedTextPointer.cs
- ItemsPresenter.cs
- InputBindingCollection.cs
- SafeNativeMethodsOther.cs
- XslAst.cs
- __Filters.cs
- ISessionStateStore.cs
- SamlSubjectStatement.cs
- GenericUriParser.cs
- BamlStream.cs
- CollectionDataContract.cs
- SystemIcmpV6Statistics.cs
- MaterialGroup.cs
- DataGridViewCellEventArgs.cs
- ProxyWebPartConnectionCollection.cs
- MyContact.cs
- CoTaskMemUnicodeSafeHandle.cs
- EntryIndex.cs
- glyphs.cs
- TagPrefixAttribute.cs
- ServiceMemoryGates.cs
- PropertyDescriptor.cs
- Utility.cs
- FaultDescription.cs
- FileInfo.cs
- ColorBlend.cs
- SoapMessage.cs
- MemberHolder.cs
- PolicyVersionConverter.cs
- EmptyReadOnlyDictionaryInternal.cs
- UrlPath.cs
- SingleKeyFrameCollection.cs
- DocumentOrderComparer.cs
- CorrelationService.cs
- VectorAnimationBase.cs
- HtmlShimManager.cs
- loginstatus.cs
- CmsUtils.cs
- RootAction.cs
- Button.cs
- MarkupObject.cs
- DrawingContextWalker.cs
- TextContainerChangeEventArgs.cs
- X509CertificateStore.cs
- AccessorTable.cs
- CustomCategoryAttribute.cs
- TCPListener.cs