Java IO类的层次关系和分类

JavaSE IO类层次关系和Java IO流的用法总结

按数据流的方向分为 输入流、输出流

此输入、输出是相对于我们写的代码程序而言,

输入流:从别的地方(本地文件,网络上的资源等)获取资源 输入到 我们的程序中

输出流:从我们的程序中 输出到 别的地方(本地文件), 将一个字符串保存到本地文件中,就需要使用输出流。

按处理数据单位不同分为 字节流、字符流

1字符 = 2字节 、 1字节(byte) = 8位(bit)  、 一个汉字占两个字节长度

字节流:每次读取(写出)一个字节,当传输的资源文件有中文时,就会出现乱码,

字符流:每次读取(写出)两个字节,有中文时,使用该流就可以正确传输显示中文。

按功能不同分为 节点流、处理流

节点流:以从或向一个特定的地方(节点)读写数据。如FileInputStream

处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,

这里就涉及到了装饰者模式,在后面会详细讲解该模式在IO中的体现。

Java IO的4个基本抽象类

Java IO这四个基本抽象类为InputStream 字节输入流,OutputStream 字节输出流, Reader 字符输入流和Writer 字符输出流。

InputStream 字节输入流

JavaSE IO类层次关系和Java IO流的用法总结

ByteArrayInputStream:字节数组输入流,该类的功能就是从字节数组(byte[])中进行以字节为单位的读取,也就是将资源文件都以字节的形式存入到该类中的字节数组中去,我们拿也是从这个字节数组中拿

PipedInputStream:管道字节输入流,它和PipedOutputStream一起使用,能实现多线程间的管道通信

FilterInputStream :装饰者模式中处于装饰者,具体的装饰者都要继承它,所以在该类的子类下都是用来装饰别的流的,也就是处理类。具体装饰者模式在下面会讲解到,到时就明白了

BufferedInputStream:缓冲流,对处理流进行装饰,增强,内部会有一个缓存区,用来存放字节,每次都是将缓存区存满然后发送,而不是一个字节或两个字节这样发送。效率更高

DataInputStream:数据输入流,它是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”

FileInputSream:文件输入流。它通常用于对文件进行读取操作

File:对指定目录的文件进行操作,具体可以查看讲解File的博文。注意,该类虽然是在IO包下,但是并不继承自四大基