Java IO流的层次结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24831411/article/details/84764243

1.字节I/O流结构
(1)InputStream的结构
字节输入流

InputStream是一个抽象父类,不可以直接使用,我们使用的是它的子类:
1. ByteArrayInputStream 从byte[]数组中以字节的方式读取
2. FileInputStream 从文件中以字节为单位读取
3. FilterInputStream 用来封装其他输入流
	1. BufferInputStream 开辟内部字节缓冲数组,对输入流进行缓存,返回一个字节数组
	2. DataInputStream 用来装饰其它输入流,它允许应用程序以与机器无关方式从底层输入流中读取基本的Java数据类型,然后使用DataOutputStream写出数据
4. ObjectInputStream 从输入流中读取序列化后的数据,并进行反序列化
5. PipedInputStream 从管道中读取数据

(2)OutputStream的结构

OutputStream是一个abstract class
1. ByteArrayOutputStream 以字节为单位将数据写入到字节数组中
2. FileOutputStream 从文件中以字节的方式读取以字节为单位将数据写入到文件中
3. FilterOutputStream 用来封装其他输出流,并为其提供功能
1. ZipOutputStream 以字节为单位 向zip文件中写入数据
2. PrintStream 装饰其他输出流,可以很方便的打印出各种数据格式的数据
3. DataOutputStream 允许程序写入与机器无关的Java数据类型
4. BufferedOutputStream 写缓冲流
4. ObjectOutputStream 对象序列化,并且用来写出序列化后的数据
5. PipedOutputStream 管道输出流

  1. 字符流 I/O结构
    Reader同样是一个 抽象父类
    1. InputStreamReader 是字节流和字符流之间的桥梁,转换器
    2. FileReader 以字符为单位读取文本文件
    3. BufferedReader 一次从流中读取8K的数据放到内存中大小可以自己设置,这样的好处是减少字节流IO操作的时间,IO操作最费时间
    4. CharArrayReader 用来读取字符数组和ByteArrayInputStream类似

Writer就不在赘述
下面是InputStream字节输入流和InputStreamReader之间的关系,由此我们可以看到,InputStreamReader是继承自InpUtStream Cahrset Reader的,我们可以设置数据的编码格式

(3)基于磁盘的I/O
File类
(4)基于网络的I/O
Socket …

猜你喜欢

转载自blog.csdn.net/qq_24831411/article/details/84764243