|
|
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
- Create subclasses of FilterInputStream and FilterOutputStream
- Override the read() and write() methods
- Override any other methods you might need
- 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
|