Java IO:PipedReader
JavaPipedReader类(java.io.PipedReader)使读取管道内容成为字符流成为可能。因此,它的工作原理与" PipedInputStream"非常相似,除了" PipedInputStream"是基于字节的,而不是基于字符的。换句话说,PipedReader用于读取文本。
JavaPipedReader必须连接到PipedWriter。通常,PipedReader和PipedWriter被不同的线程使用。只能将一个PipedReader连接到同一PipedWriter。
PipedReader示例
这是一个简单的JavaPipedReader示例:
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();
注意:为清楚起见,此处已跳过适当的异常处理。要了解有关正确的异常处理的更多信息,请转到Java IO异常处理。
read()
JavaPipedReader的read()方法返回一个int值,其中包含所读取字符的char值。如果read()方法返回-1,则说明'PipedReader'中没有更多的数据可读取,因此可以将其关闭。也就是说,-1作为int值,而不是-1作为字节值。这里有区别!
Java IO管道
如我们在上面的示例中看到的,需要将PipedReader连接到PipedWriter。当连接这两个字符流时,它们形成一个管道。
关闭PipedReader
当我们从JavaPipedReader中读取完字符后,我们应该记得将其关闭。关闭PipedReader是通过调用其close()方法来完成的。
关闭PipedReader不会关闭它连接的PipedWriter。但是,即使" PipedReader"已关闭,我们也无法将新的" PipedReader"连接到" PipedWriter"。
这是关闭JavaPipedReader的样子:
pipedReader.close();
我们还可以使用Java 7中引入的try-with-resources构造。这是如何使用try-with-resources构造使用和关闭PipedReader外观的方法:
try(PipedReader pipedReader =
    new PipedReader(pipedWriter)){
    int data = pipedReader.read();
    while(data != -) {
        System.out.print((char) data));
        data = pipedReader.read();
    }
}
注意,如何不再对PipedReader实例进行任何显式的close()方法调用。 try-with-resources构造可以解决这一问题。

