按照流的流向来分,可以分为输入流和输出流:
- 输入流:只能从中读取数据,而不能向其中写数据.
- 输出流:只能向其写出数据,而不能从中读取数据
.
对于上面的左图来说,数据从内存到硬盘,通常我们称为输出流,也就是说,这里的输出,都是从程序运行所在的内存角度来划分的。对于右边的这张图来说,数据从服务器通过网路流向客户端,Server的内存负责将数据输出到网络里,因此Server端的程序使用的是输出流,Client端的内存负责从网路里读取数据,因此Client端的程序应该使用输入流.
Java中的输入流 主要由InputStream 和Reader作为基类,而输出流主要由OutputStream和Writer作为基类。
字节流和字符流
字节流和字符流所操作的数据单元不同:字节流操作的最小数据单元是8位的字节
(也是byte类型数据),而字符流操作的最小数据单元是16位的字符
(java使用16位的Unicode编码级作为编码方式)。
字节流主要由InputStream 和OutputStream作为基类,而字符流主要由Reader和Writer作为基类。
节点流和处理流
节点流:可以从一个特定的IO设备(如磁盘、网路)读/写数据的流,成为节点流,节点流通常也被成为低级流;使用节点流进行输入输出时 ,程序直接连接到实际的数据源,和实际的输入、输出节点连接.下图显示了节点流的示意图:
处理流:对一个已存在的流进行连接或封装,通过封装后的流来实现数据的读写功能.处理流也成为高级流.使用处理流的一个明显好处就是:只要使用相同的处理流,程序就可以采用完全相同的输入、输出代码来访问不同的数据源,随着处理流所包装节点流的改变,程序实际所访问的数据源也相应发生改变.下图示范了处理流的过程.
以上是关于IO流的一些基本情况的说明,理解上面的知识,对继续学习IO流,起着至关重要的作用,不然你到后面会晕的.