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构造可以解决这一问题。