什么是IO流?
Java的IO流是实现输入输出的基础,它可以方便的实现数据的输入和输出操作,在Java中把不同的输入输出源抽象表述为“流”。通过流的方式允许java程序使用相同的方式来访问不同的IO源。
流的分类
按流向
- 输入流:只能从中读取数据,而不能向其写入数据;
- 输出流:只能向其写入数据,而不能从中读取数据;
这里的输入、输出都是针对内存而言,向内存中输入,从内存中输出;
Java的输入流主要由InputStream和Reader作为基类,而输出则主要由OutputStream和Writer作为基类。
按形式
字节流和字符流用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的数据是8位的字节,而字符操作的数据单元是16位的字符。字节流主要由InputStream和OutputStream作为基类;而字符流主要是由Reader和Writer作为基类。
按角色
- 节点流:可以从/向一个特定的IO设备读/写数据的流;
- 处理流:用一个已存在的流进行封装或连接,通过封装后的流来实现数据读/写功能。
当使用处理流进行输入/输出时,程序并不会直接连接到实际的数据源,使用处理流的一个明显好处是:只要使用相同的处理流,程序就可以采用完全相同的输入/输出代码来访问不同的数据源,随着处理流所包装节点流的变化,程序实际所访问的数据源也相应发生变化。
流的概念模型
java把所有设备里的有序数据抽象成模型,简化了输入/输出处理。
Java的IO流共涉及40多个类,这些类看上去杂乱无章,实际上非常规则,而且彼此之间存在非常紧密的联系。都是从下面4个抽象基类派生的。
-
InputStream/Writer:所有输入流的基类; -
OutputStream/Reader;所有输出流的基类;
Java处理流模型则体现了Java输出/输入设计的灵活性,主要体现在以下两个方面:
- 性能的提高,主要以增加缓冲的方式来提高输入/输出效率;
- 操作的便捷:处理流可能提供一系列便捷的方法来一次输入/输出大批量的内容,而不是输入/输出一个字节/字符。