1 流的概念 stream 代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源
流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接
类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流
这时候你就可以想象数据好像在这其中“流”动一样,如下图: 在 Java 的IO 中,所有的stream(包括 Inputstream 和 Out stream)都包括两种类型: (1)字节流 表示以字节为单位从 stream 中读取或往 stream 中写入信息,即 io 包中的inputstream 类和 outputstream 类的派生类
通常用来读取二进制数据,如图象和声音
(2)字符流 以 Unicode 字符为导向的stream,表示以 Unicode 字符为单位从 stream 中读取或往 stream 中写入信息
区别: Reader 和 Writer 要解决的,最主要的问题就是国际化
原先的I/O 类库只支持 8 位的字节流,因此不可能很好地处理 16 位的Unicode 字符流
Unicode 是国际化的字符集(更何况 Java 内置的char 就是16 位的Unicode字符),这样加了 Reader 和 Writer 之后,所有的I/O 就都支持 Unicode 了
此外新类库的性能也比旧的好
但是,Read 和 Write 并不是取代InputStream 和 OutputStream,有时,你还必须同时使用"基于 byte 的类"和"基于字符的类"
为此,它还提供了两个"适配器(adapter)"类
InputStreamReader 负责将 InputStream 转化成Reader,而 OutputStreamWriter 则将 OutputStream 转化成 W