java中Writer、Reader、OutputStream、InputStream 区别与联系之Reader篇
2012-08-15 19:57
471 查看
InputSteream和OutpurStream是针对基于字节(byte)输入输出设计的,实际应用中常常需要读写的是基于字符(char
,Unicode 2个字节)的,java.io.Reader和java.io.Writer就是所有读写字符数据流的父类。
Reader提供的方法和InputStream提供的几乎是一样的,不同之处在于Reader的操作多数是char类型的。
对上图(从下往上看)总结说明如下:
Reader类中定义了成员变量lock,顾名思义,lock的用途是解决实现对流操作的同步问题。Reader的子类可以使用这个成员变量来实现流操作的同步操作。
F ilterReader也是采用了Decorator(装饰)模式,与我们在前面学习InputStream、OutputStream相比较,如下图所示:
前面的BufferedInputStream、BufferedOutputStream都是采用了Decorator(装饰)模式,而这里的BufferedReader是直接从Reader继承下来了,而不是从F
ilterReader继承的,不符合Decorator(装饰)模式据说这个JAVA SDK中的一个BUG,但是好像一直也没有修改,估计对使用没有大的影响吧。此外BufferedReader还提供了一个String readLine()函数,方便我们从文件中读取一行数据,这个函数也是比较有用的。
InputStreamReader就像是一个桥:把字节流(byte)转换为字符流(char),它读取字节流,并使用指定的字符集(charset)将这些字节流转换为字符。常见的字符集有:GBK、ISO-8859-1、UTF-8,Java的字符流本身采用的就是Unicode,关于字符集的详细说明请看文档。给大家举个具体的例子,如下:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String strLine;
while(strLine=in.readline()!=null)
{
System.out.println(strLine);
}
in.close();
具体的含义就是:将标准输入流转换为字符流,并缓存到BufferedReader的缓冲区中,并将缓冲区中的数据显示在标准输出设备上。
StringReader、CharArrayReader使用起来都非常简单;
,Unicode 2个字节)的,java.io.Reader和java.io.Writer就是所有读写字符数据流的父类。
Reader提供的方法和InputStream提供的几乎是一样的,不同之处在于Reader的操作多数是char类型的。
对上图(从下往上看)总结说明如下:
Reader类中定义了成员变量lock,顾名思义,lock的用途是解决实现对流操作的同步问题。Reader的子类可以使用这个成员变量来实现流操作的同步操作。
F ilterReader也是采用了Decorator(装饰)模式,与我们在前面学习InputStream、OutputStream相比较,如下图所示:
前面的BufferedInputStream、BufferedOutputStream都是采用了Decorator(装饰)模式,而这里的BufferedReader是直接从Reader继承下来了,而不是从F
ilterReader继承的,不符合Decorator(装饰)模式据说这个JAVA SDK中的一个BUG,但是好像一直也没有修改,估计对使用没有大的影响吧。此外BufferedReader还提供了一个String readLine()函数,方便我们从文件中读取一行数据,这个函数也是比较有用的。
InputStreamReader就像是一个桥:把字节流(byte)转换为字符流(char),它读取字节流,并使用指定的字符集(charset)将这些字节流转换为字符。常见的字符集有:GBK、ISO-8859-1、UTF-8,Java的字符流本身采用的就是Unicode,关于字符集的详细说明请看文档。给大家举个具体的例子,如下:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String strLine;
while(strLine=in.readline()!=null)
{
System.out.println(strLine);
}
in.close();
具体的含义就是:将标准输入流转换为字符流,并缓存到BufferedReader的缓冲区中,并将缓冲区中的数据显示在标准输出设备上。
StringReader、CharArrayReader使用起来都非常简单;
总结说明
Reader子类中较常用的还是:BufferedInputStream、InputStreamReader,BufferedInputStream为我们提供了数据缓存机制,对于读取大块的数据比较方便,尤其是在读取文件的时候;InputStreamReader作为流的转换,转换后的字符流是什么编码,与虚拟机默认的字符集有关,关于字符集部分大家还需要去深入学习。相关文章推荐
- java中Writer、Reader、OutputStream、InputStream 区别与联系之Writer篇
- java中Writer、Reader、OutputStream、InputStream 区别与联系之OutputStream篇
- java中Writer、Reader、OutputStream、InputStream 区别与联系之InputStream篇
- Java InputStreamReader 和 OutputStreamWriter
- Java IO 文件流的读,文件流写Writer,Reader,InputStream,OutputStream封装
- Java InputStream和OutputStream,Reader和Writer的辨析
- Java基础知识强化之IO流笔记36:InputStreamReader/OutputStreamWriter 复制文本文件案例
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)
- Java I/O流InputStream,OutputStream,Reader,Writer
- Java IO--字节流与字符流OutputStream/InputStream/Writer/Reader
- Java IO操作——字节-字符转换流(OutputStreamWriter、InputStreamReader)
- java文件传输基础:字节字符流的转换OutputStreamWriter/InputStreamReader
- java使 FileWriter FileReader 无编码格式,OutputStreamWriter InputStreamReader可设置编码格式
- java使 FileWriter FileReader 无编码格式,OutputStreamWriter InputStreamReader可设置编码格式
- java中的InputStream、OutputStream以及Reader、Writer
- Java IO--字节-字符流转换OutputStreamWriter/InputStreamReader
- Java I/O流-总结(InputStream,OutputStream,Reader,Writer)
- Java 输出流转输入流的方法(OutputStream转InputStream,Writer转Reader)
- Reader/Writer与InputStream/OutputStream的区别
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)