Java Quick Reference
  Language Fundamentals
  Operators and Assignments
  Flow Control and Exceptions
  Declarations and Access Control
  Garbage Collection
  Overloading and Overriding
  Threads
  The java.lang Package
  The java.util Package
  The java.awt Package
  The java.io Package
  References
  Miscellaneous Notes
  Tips & Traps
  Mock Exams

The java.io Package - Filters

  • Filters sit between input and output streams, processing the bytes being transferred
  • FilterInputStream extends InputStream and FilterOutputStream extends OutputStream
  • this means a FilterInputStream, and any of it's subclasses, can take any InputStream as an argument and a FilterOutputStream can take any OutputStream
  • this allows the chaining of filter streams ie a FilterInputStream can take another FilterInputStream; the original source can be an object that is not a filter stream as long as it isn't reading from another input stream
  • Output filters can also be chained, you can have as many filters as you like but the last in the chain must be an OutpuStream
  • both methods simply override all their inherited methods, passing all their processing along to the underlying Input or Output stream
FilterInputStream Subclasses
Subclass Constructors
BufferedInputStream BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in, int size)
DataInputStream DataInputStream(InputStream in)
LineNumberInputStream LineNumberInputStream(InputStream in)
PushbackInputStream PushbackInputStream(InputStream in)
PushbackInputStream(InputStream in, int size)
FilterOutputStream Subclasses
Subclass Constructors
BufferedOutputStream BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out, int size)
DataOutputStream DataOutputStream(OutputStream out)
PrintStream PrintStream(OutputStream out)
PrintStream(OutputStream out, boolean autoflush)
  • technically, you should use PrintWriter when doing character related I/O , PrintStream is included for historical reasons. It should only be used with System.in as it assumes Latin-1 character encoding.
  • most Reader and Writer classes can also act as filters as most of them already have constructors which take another character stream
  • to create your own filter streams
    1. Create subclasses of FilterInputStream and FilterOutputStream
    2. Override the read() and write() methods
    3. Override any other methods you might need
    4. Make sure the input and output streams work together

Summary

  • If its an input filter, it can take any InputStream object.
  • If an output filter, it can take any OutputStream object.
  • FilterWriter classes take a Writer object.
  • FilterReader classes take a Reader object.

Source code for Examples



Pkg Overview Data Streams Character Streams Byte Streams File Class Readers & Writers
Filter Streams Data Input/Output Reading & Writing Files Serialization