10. Java IO: Readers and Writers
想要查看此教程的目录请点击:Java IO教程目录贴地址
Java IO中的java.io.Reader和java.io.Writer的工作原理很像InputStream和OutputStream,但不同的是reader和writer是基于字符的,他们是用来用些文本数据的。InputStream和OutputStream的基于字节的,记住了?
Reader
Java Reader是所有java reader相关类的基类。子类包括有BufferedReader、PushbackReader、InputStreamReader、StringReader和一些其他的类。
下面这有一个例子:
Reader reader = new FileReader("c:\\data\\myfile.txt");
int data = reader.read();
while(data != -1){
char dataChar = (char) data;
data = reader.read();
}
注意,当InputStream每次返回一个字节的时候,这个字节是 0 到 255 直接的值(-1代表没有数据了),Reader每次返回一个字符,意味着返回 0 到 65535 (-1代码数据已经读完)。这并不意味着Reader从已连接的数据源一次读取两个字节,它每次可以一次读取一或多个字节。这取决于文本数据的编码格式。
用InputStreams把Reader连接起来
Java Reader可以被InputStream连接起来。如果你有一个InputStream,并且向从这里读取字符,你可以用InputStreamReader包装它。把InputStream传入InputStreamReader的构造方法:
Reader reader = new InputStreamReader(inputStream);
在构造方法中,你也可以指定一个用来读取文本数据的编码。更多关于这个内容可以参考InputStreamReader章节。
Writer
Java IO API中Writer是所有writer的基类。子类主要包括BufferedWriter和PrintWriter等一些其他的类。
下面是一个Writer的例子:
Writer writer = new OutputStreamWriter(outputStream);
将Readers和Writers结合起来
像stream一样,Reader和Writer也可以组合起来用,成为更有意思的IO。它就像用InputStream把Reader结合起来,或者用OutputStream把Writer结合起来。比如,你可以用BufferedReader把Reader包装起来,或者用BufferedWriter把Writer包装起来,下面是两个这样的例子:
Reader reader = new BufferedReader(new FileReader(...));
Writer writer = new BufferedWriter(new FileWriter(...));