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"));