FilterOutputStream

A filter output stream takes the data passed to its write() methods, filters it, and writes the filtered data to an underlying output stream.

Filter output streams are created from subclasses of the concrete FilterOutputStream class, an OutputStream subclass.

The following code extends FilterOutputStream.

 
import java.io.FileInputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Main {

  public static void main(String[] args) throws Exception {

    InputStream in = new FileInputStream("test.txt");
    OutputStream out = System.out;

    PrintableOutputStream pout = new PrintableOutputStream(out);
    for (int c = in.read(); c != -1; c = in.read()) {
      pout.write(c);
    }
    out.close();
  }
}

class PrintableOutputStream extends FilterOutputStream {

  public PrintableOutputStream(OutputStream out) {
    super(out);
  }

  public void write(int b) throws IOException {

    // carriage return, linefeed, and tab
    if (b == '\n' || b == '\r' || b == '\t')
      out.write(b);
    // non-printing characters
    else if (b < 32 || b > 126)
      out.write('?');
    // printing, ASCII characters
    else
      out.write(b);
  }

  public void write(byte[] data, int offset, int length) throws IOException {
    for (int i = offset; i < offset + length; i++) {
      this.write(data[i]);
    }
  }
}
  

BufferedOutputStream is a subclass of FilterOutputStream.


import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

public class Main {

  public static void main(String[] args) throws Exception {
    BufferedOutputStream bufferedOutput = new BufferedOutputStream(new FileOutputStream(
        "yourFile.txt"));
    bufferedOutput.write("Line one".getBytes());
    bufferedOutput.write("\n".getBytes());

    bufferedOutput.write(65);
    bufferedOutput.close();
  }
}
Home 
  Java Book 
    File Stream