概述
Java的IO流是实现输入/输出的基础,按照不同的分类方式,可以将流分为不同的类型:
1、按照流的流向来分,可以分为输入流和输出流
输入流:只能从中读取数据,而不能向其写出数据。
输出流:只能向其写出数据,而不能从中读取数据。
Java的输入流主要由InputStream和Reader作为基类,而输出流则主要由OutputStream和Writer作为基类。
注意:这里的输入、输出都是从程序运行所在
内存的角度来划分的。比如数据从内存到硬盘,我们称为输出流,
数据从服务器通过网络流向客户端,Server的内存负责将数据输出到网络里,因此Server端的程序使用输出流,Client端的内存负责从网络里读取数据,因为Client端的程序使用输入流。如下图:
2、按操作的最小数据单元可以分为字节流和字符流
字节流和字符流的区别在于字节流和字符流操作的数据单元不同:
字节流操作的最小数据单元是
8位的字节,而
字符流操作的最小数据单元是
16位的字符。字节流主要有InputStream和OutputStream作为基类,而字符流则主要由Reader和Writer作为基类。
3、按照流的角色可以分为节点流和处理流
节点流可以从/向一个特定的IO设备(如磁盘、网络)读/写数据的流,节点流常常也被称为低级流。当使用节点流进行输入/输出时,
程序直接连接到实际的数据源,和实际的输入/输出节点连接。如下图:
处理流则用于对一个
已存在的流(节点流或处理流)进行连接或封装,通过封装后的流来实现数据读/写功能。处理流也称为高级流。当使用处理流来进行输入/输出时,
程序并不会直接连接到实际的数据源,没有和实际的输入/输出节点连接。如下图:
使用处理流的好处:只要使用相同的处理流,程序就可以采用完成相同的输入/输出代码来访问不同的数据源,随着处理流所包装节点流的改变,程序实际所访问的数据源也相应发生改变。
使用处理流来包装节点流是一种典型的装饰器设计模式,通过使用处理流来包装不同的节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入/输出功能。因此处理流也被称为包装流。
识别处理流和节点流的简单方法:只要流的构造器参数不是一个物理节点,而是已经存在的流,那么这种流就是一定是处理流,而所有的节点流都是直接以物理IO节点作为构造参数的。
InputStream/Reader:所有输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。
IO流的体系图如下:
最后
以上就是凶狠保温杯为你收集整理的IO流学习笔记2——流的分类的全部内容,希望文章能够帮你解决IO流学习笔记2——流的分类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复