Reading and Writing with Streams
Learn about streams and byte sequences for flexible data handling in file, I/O, and networking, including Stream classes, storage, function, and helper.
A stream is a sequence of bytes that can be read from and written to. Although files can be processed like arrays, with random access provided by knowing the position of a byte within the file, it can be useful to process files as a stream in which the bytes can be accessed in sequential order.
Streams can also be used to process terminal input and output and networking resources such as sockets and ports that do not provide random access and cannot seek (that is, move) to a position. We can write code to process arbitrary bytes without knowing or caring where they come from. Our code simply reads or writes to a stream, and another piece of code handles where the bytes are stored.
Understanding abstract and concrete streams
There is an abstract class named Stream
that represents any type of stream. Remember that an abstract class cannot be instantiated using new
; it can only be inherited. Many concrete classes inherit from this base class, including FileStream
, MemoryStream
, BufferedStream
, GZipStream
, and SslStream
, so they all work the same way. All streams implement IDisposable
, so they have a Dispose
method to release unmanaged resources. Some of the common members of the Stream
class are described in the following table:
Get hands-on with 1400+ tech skills courses.