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( );
}