This class is the basic building block of I/O in the .NET Framework. Many types of application use a Stream in one way or another. When calling System.Console.WriteLine( ) , you use a TextWriter , which contains a StreamWriter . When you design an ASP.NET application, the System.Web.UI.Page uses a System.Net.Sockets.NetworkStream . In fact, whenever you access a remote database server you are using a NetworkStream . To determine whether a given Stream can read, write, or seek, check CanRead , CanWrite , or CanSeek , respectively. If your stream can seek, you may seek forward or backward using Seek( ) . Length reveals the length of the stream, which can also be set by calling SetLength( ) , and Position allows you to check your current position in the stream. To perform asynchronous I/O, call BeginRead( ) or BeginWrite( ) . Notification of an asynchronous operation comes in two ways: either via an System.AsyncCallback delegate callback passed in as part of the BeginRead( ) / BeginWrite( ) call, or else by calling the EndRead( ) or EndWrite( ) method explicitly, which blocks the calling thread until the async operation completes. Streams usually hold on to a precious resource (a network connection or a file handle), which should be freed as soon as it is not needed any more. Because destruction is completely nondeterministic with garbage collection, be sure to call Close( ) at the end of the Stream 's useful lifetime. (Alternatively, wrap the use of the Stream in a using block to have the compiler generate the call to Dispose( ) which in turn calls Close( ) when the block finishes.) public abstract class Stream : MarshalByRefObject, IDisposable { // Protected Constructors protected Stream ( ); // Public Static Fields public static readonly Stream Null ; // =System.IO.Stream+NullStream // Public Instance Properties public abstract bool CanRead {get; } public abstract bool CanSeek {get; } public abstract bool CanWrite {get; } public abstract long Length {get; } public abstract long Position {set; get; } // Public Instance Methods public virtual IAsyncResult BeginRead (byte[ ] buffer , int offset , int count , AsyncCallback callback , object state ); public virtual IAsyncResult BeginWrite (byte[ ] buffer , int offset , int count , AsyncCallback callback , object state ); public virtual void Close ( ); public virtual int EndRead (IAsyncResult asyncResult ); public virtual void EndWrite (IAsyncResult asyncResult ); public abstract void Flush ( ); public abstract int Read (in byte[ ] buffer , int offset , int count ); public virtual int ReadByte ( ); public abstract long Seek (long offset , SeekOrigin origin ); public abstract void SetLength (long value ); public abstract void Write (byte[ ] buffer , int offset , int count ); public virtual void WriteByte (byte value ); // Protected Instance Methods protected virtual WaitHandle CreateWaitHandle ( ); } HierarchySystem.Object System.MarshalByRefObject Stream(System.IDisposable) SubclassesBufferedStream , FileStream , MemoryStream , System.Net.Sockets.NetworkStream Returned ByMultiple types Passed ToMultiple types |