Java IO:Reader和Writer
Java IO中的Java Reader(java.io.Reader)和Java Writer类(java.io.Writer)的工作方式与InputStream和OutputStream相似,但Reader除外。和Writer
是基于字符的。它们旨在阅读和编写文本。 InputStream和OutputStream是基于字节的。
Reader
JavaReader
是Java IO API中所有Reader
的基类。子类包括:BufferedReader,PushbackReader,InputStreamReader,StringReader等。
这是一个简单的Java IOReader
示例:
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一次返回一个char值,表示一个值介于0到65535之间(如果流中没有更多数据,则为-1)。这并不一定意味着Reader
一次从它所连接的源中读取两个字节。它可能一次读取一个或者多个字节,具体取决于所读取文本的编码。
将Reader与InputStreams结合
Java的Reader可以与InputStream结合使用。如果我们有一个InputStream并想从中读取字符,则可以将其包装在InputStreamReader中。将InputStream传递给InputStreamReader的构造函数,如下所示:
Reader reader = new InputStreamReader(inputStream);
在构造函数中,我们还可以指定用于解码文本等的字符集。有关更多信息,请参见InputStreamReader上的文本。
Writer
JavaWriter
类是Java IO API中所有Writer
的基类。子类包括BufferedWriter
和PrintWriter
。
这是一个简单的Java IOWriter
示例:
Writer writer = new FileWriter("c:\data\file-output.txt"); writer.write("Hello World Writer"); writer.close();
将Writer与OutputStreams结合
JavaWriter
可以与OutputStream
结合使用,就像Readers
和InputStream
一样。将OutputStream软件包在OutputStreamWriter中,并将所有写入Writer的字符传递到OutputStream中。这是一个OutputStreamWriter示例:
Writer writer = new OutputStreamWriter(outputStream);
结合Reader和Writer
就像流一样,可以将"读者"和"作家"组合成链,以实现更有趣的IO。就像将Reader和InputStream或者Writer与OutputStream组合一样。例如,我们可以通过将Reader
包装在BufferedReader
中或者将Writer
包装在BufferedWriter
中来实现缓冲。这是两个这样的例子:
Reader reader = new BufferedReader(new FileReader(...)); Writer writer = new BufferedWriter(new FileWriter(...));