Java IO: PipedReader
Jakob Jenkov |
The Java PipedReader class (java.io.PipedReader) makes it possible to read the contents of a pipe as
a stream of characters. As such it works very much like a PipedInputStream
except the PipedInputStream is byte based, not character based. The PipedReader
is intended to read text, in other words.
A Java PipedReader must be connected to a PipedWriter. Often, the PipedReader
and PipedWriter are used by different threads. Only one PipedReader can be connected
to the same PipedWriter.
PipedReader Example
Here is a simple Java PipedReader example:
PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader(pipedWriter);
int data = pipedReader.read();
while(data != -1) {
//do something with data...
doSomethingWithData(data);
data = pipedReader.read();
}
pipedReader.close();
Note: The proper exception handling has been skipped here for the sake of clarity. To learn more about correct exception handling, go to Java IO Exception Handling.
read()
The read() method of a Java PipedReader returns an int which contains the char value of the
character read. If the read() method returns -1, there is no more data to read in the PipedReader,
and it can be closed. That is, -1 as int value, not -1 as byte value. There is a difference here!
Java IO Pipes
As you can see in the example above, a PipedReader needs to be connected to a
PipedWriter. When these two character streams are connected they form a pipe. To learn
more about Java IO pipes, go to Java IO: Pipes.
Closing a PipedReader
When you are finished reading characters from a Java PipedReader you should remember to close it.
Closing a PipedReader is done by calling its close() method.
Closing a PipedReader does not close the PipedWriter it is connected to. But - even
if the PipedReader is closed you cannot connect a new PipedReader to the PipedWriter.
Here is how closing a Java PipedReader looks:
pipedReader.close();
You can also use the try-with-resources construct
introduced in Java 7. Here is how to use and close a PipedReader looks with the try-with-resources
construct:
try(PipedReader pipedReader =
new PipedReader(pipedWriter)){
int data = pipedReader.read();
while(data != -) {
System.out.print((char) data));
data = pipedReader.read();
}
}
Notice how there is no longer any explicit close() method call to the PipedReader instance. The try-with-resources construct
takes care of that.
| Tweet | |
Jakob Jenkov | |











