The java.io.FilterInputStream and
java.io.FilterOutputStream classes are concrete
subclasses of InputStream and
OutputStream that somehow modify data read from an
underlying stream. You rarely use these classes directly, but
their subclasses are extremely important, especially
DataInputStream and DataOutputStream.
You connect filter streams to an underlying stream that supplies
the actual bytes of data by passing the original stream to the
filter stream's constructor. For example, to create a new
DataOutputStream from a
FileOutputStream you might do this:
FileOutputStream fos = new FileOutputStream("ln.txt");
DataOutputStream dos = new DataOutputStream(fos);
It's not uncommon to combine these into one line like this:
DataOutputStream dos = new DataOutputStream(new FileOutputStream("ln.txt"));