Java IO:Reader和Writer

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

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的基类。子类包括BufferedWriterPrintWriter

这是一个简单的Java IOWriter示例:

Writer writer = new FileWriter("c:\data\file-output.txt");

writer.write("Hello World Writer");
writer.close();

将Writer与OutputStreams结合

JavaWriter可以与OutputStream结合使用,就像ReadersInputStream一样。将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(...));