java.io中定义了很多流类型(类或抽象类)来实现输入/输出功能;我们可以从不同的角度对其进行分类(这里我从实际实用的角度来分析分类)
首先你得知道你要进行输入还是输出吧!所以
1,根据数据流向的不同,分为输入流和输出流。
输入流主要由InputStream和Reader作为基类,这一类输入流(包括其派生类),是将数据读到内存中。
输出流主要是由OutputStream和Writer作为基类,这一类输出流(包括其派生类),是将内存中数据写入到磁盘中。
确定了是输入还是输出操作之后,你是不是就要考虑要以什么样的单位来处理流了吧!所以
2,根据数据处理单位不同,分为字节流和字符流。
字节流操作的最小数据单元是8位的字节,主要是由InputStream和OutputStream作为基类。
字符流操作的最小数据单元是16位的字符。主要是由Reader和Writer作为基类。
接着,你是不是该确定你要怎么样输入和输出吧,也就是直接(节点式)还是间接(包装式),所以
3,根据你的对流的包装方式,分为节点流和处理流。
节点流是从一个特定的数据源(节点)读写数据,没有对流包装。图为:
处理流是连接在已存在的节点流或处理流之上,再对流的又一次包装,就像管子外再套个管子来输入输出水一样,进而达到更为方便强大的
读写功能。图为:
然后,我自己整理了一些常用的流:
IO的5对基本流:
1.文件流(字节流/节点流):底层的流,用于实现程序和文件之间的互相访问.
FileInputStream 在读入不存在的文件时会抛出异常.
FileOutputStrea 在执行构造时就会把目的文件的内容清空,除非使用追加方式.
2.数据流:能够处理基本类型的数据也支持字符的处理流,用于访问各种基本类型的数据
DataInputStream
DataOutputStream
3.对象流:
ObjectInputStream
ObjectOutputStream
4.逐行流(实现对数据的逐行读写的处理流)
BufferedReader
BufferedWriter
5.转换流/桥梁流:实现字节到字符的转换,中间流,存在于底层流和处理流之间
InputStreamReader
OutputStreamWriter
逐行读入文本的方法:程序<--ReadLine<--BufferedReader<--InputStreamReader<-- FileInputStream<--文件.
管道流:和线程进行交互的一组数据流
PipedInputStream
PipedOutputStream
我想写篇日记作为流的总结,求各位补充,求顶起。
|
|