概述
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。
用来进行输入输出操作的流就称为IO流(Input Output Stream)。换句话说,IO流就是以流的方式进行输入输出。
我们通常所说的IO流指的是Input和Output,可以将数据写入文件,也可以读取文件中的数据。
目的
集合或数组保存数据的时候讲数据保存在内存中,保留在内存中的数据,一旦断电,就没有了。因为内存中存储的数据是临时的,所以,如果想要将数据永久保存,则可以存储在文件中,我们可以通过IO流我们可以将数据写入到文件中,也可以将文件中的数据读取到程序中。比如我们经常用到的读取文件拷贝文件等,都是IO流的具体实现。
种类
IO流(Input Output Stream),顾名思义,即Input
输入流和Output
输出流,其中输入输出流均有字符流和字节流的用法,比如字节流:输入流为InputStream,输出流为OutputStream;而字符流:输入流为Reader,输出流为Writer。
字节流和字符流的区别
流 | 字节流 | 字符流 |
---|---|---|
读取方式 | 字节(byte) | 字符(char) |
速度 | 较慢 | 较快 |
效率 | 低 | 高 |
步骤
在IO流里,输入输出分为4步:格式化/解析,缓冲,编码转换和传递。
格式化/解析
在内部数据表示(以字节为单位)与外部数据表示(以字符为单位)之间进行双向转换。例如一个2字节的整数10002,就需要5个字符来表示。
缓冲
用于在格式/解析与传递之间缓存字符序列。对于输出,较短的字符序列格式化之后并不马上输出,而是保存在缓冲区里,待累积到一定规模之后再传递到外部设备。相反,从外部设备读入的大量数据也是先放在缓冲区,然后逐步取出完成输入。默认时,IO流的输入输出都是经过缓冲的,也可以让IO流工作在无缓冲模式下。
编码转换
是将一种字符表达式转换成另一种字符表达式。如果格式化产生的字符表达式与外部字符表达式不同(输出时),或者外部表达式与IO流能解析的表达式不同(输入时),就必须进行编码转换。如多字节编码与宽字符编码之间的转换等。多数情况下并不需要进行编码转换。
传递
主要是与外部设备进行通信。输出时,传递负责将经过格式化、缓冲即编码转换后的字符序列发送到外部设备;输入时,则负责将外部设备抽取数据,为其后进行的编码转换、缓冲及解析提供字符序列。
具体实现过程
- 确定源和目标文件
- 构建流对象
- 读取内容
- 写出内容
- 关闭流
总结
IO流很强大,基本上我们所有的程序都用到了这方面的内容,知不是我们没有去仔细研究,接下来两篇博客,我将侧重讲解字节流和字符流。
end
谢谢您的阅读!