I/O stream classes can represent sources of
input data and destinations for output data. We saw, for
example, that disk files become sources
via FileInputStream
and a byte array can become the
destination of a stream via the ByteArrayOutputStream
class.
We emphasized that wrapper classes add greater functionality
to the streams they contain. However, you can also look at the wrapper
classes as filters. A stream filter monitors, transforms,
or is some way processes the data as the stream flows through it
on the way from a source to a destination. The BufferedInputStream
and BufferedOutputStream
classes, for example, hold data in buffers until they are full before
letting the data out. They extend the classes named FilterInputStream
and FilterOutputStream,
respectively.
The class heirarchy
diagram shown in the Java I/O Overview
shows the subclasses of the FilterInputStream
and FilterOutputStream.
The FilterInputStream
class wraps an InputStream
object passed via its constructor:
protected FilterInputStream
(InputStream in_stream)
The FilterInputStream
class overrides all of the same methods in InputStream
but they simply invoke the corresponding methods in the in_stream
object. The FilterInputStream
does nothing itself and is meant to be extended. A subclass overrides
some or all of the methods to carry out the desired action on the
data. For example, BufferedInputStream
overrides all but one of the read()
methods in FilterInputStream.
Similarly, FilterOutputStream
is intended to be subclassed by a class such as BufferedOutputStream
that overrides some or all of its methods to carry out operations
on the outgoing data.
Java I/O can be somewhat overwhelming at first but
it allows for a great deal of modularity and high level abstraction
that can actually bring clarity to program design. The concepts
of sources, destinations, and filters helps especially to make sense
of the large number of classes in Java I/O.
We discuss in Chapter
9: Tech how to make histograms into stream sources and stream
destinations and how to filter data going to a histogram.
References & Web
Resources
Latest update: Nov. 14, 2004
|