Java IO:PipedReader

时间:2020-01-09 10:36:05  来源:igfitidea点击:

JavaPipedReader类(java.io.PipedReader)使读取管道内容成为字符流成为可能。因此,它的工作原理与" PipedInputStream"非常相似,除了" PipedInputStream"是基于字节的,而不是基于字符的。换句话说,PipedReader用于读取文本。

JavaPipedReader必须连接到PipedWriter。通常,PipedReaderPipedWriter被不同的线程使用。只能将一个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()

JavaPipedReaderread()方法返回一个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构造可以解决这一问题。