IO 之IO流体系和IO中的设计模式(装饰器适配器)

本文介绍了Java中的IO流体系,包括流的分类、IO流的框架以及Java I/O库的设计原则。重点讲解了IO中的装饰器模式和适配器模式,阐述了如何通过InputStreamReader和OutputStreamWriter实现字节流到字符流的适配,并通过装饰模式增强InputStream和OutputStream的功能。此外,还提供了源码解析和使用示例。
摘要由CSDN通过智能技术生成

流是一种抽象概念,它代表了数据的无结构化传递
按照流的方式进行输入输出,数据被当成无结构的字节序列或字符序列。从流中取得数据的操作称为提取操作,亦称操作;而向流中添加数据的操作称为插入操作,亦称操作。
用来进行输入输出操作的流就称为IO流。

流的分类

  1. 流的流向:输入输出流
  2. 流的数据单位:字符流(Writer、Reader)和字节流(InputStream、OutputStream)
  3. 流的功能:节点流、处理流。可以从/向一个特定的IO设备(如磁盘、网络)读/写数据的流,称为节点流,节点流也被成为低级流。:ByteArrayInputStream、FileInputStream
    处理流是对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能,处理流也被称为高级流。:BufferedInputStream、DataInputStream等
//节点流,直接传入的参数是IO设备
FileInputStream fis = new FileInputStream("test.txt");
//处理流,直接传入的参数是流对象
BufferedInputStream bis = new BufferedInputStream(fis);

实际上,**Java使用处理流来包装节点流是一种典型的装饰器设计模式,**通过使用处理流来包装不同的节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入/输出功能。

java I/O库的设计原则

java语言的I/O库是对各种常见的流源、流汇以及处理过程的抽象化。客户端的java 程序不必知道最终的的流源、流汇是磁盘上的文件还是一个数组,或者是一个线程;也不比插手到诸如数据是否缓存、可否按照行号读取等处理的细节中去。要理解java I/O 这个庞大而复杂的库,关键是掌握两个对称性和两个设计模式。

IO流的框架

在这里插入图片描述
注意关闭输入输出流:在执行完流操作后,要调用close()方法来关系输入流,因为程序里打开的IO资源不属于内存资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件IO资源。

使用Java的IO流执行输出时,不要忘记关闭输出流,关闭输出流除了可以保证流的物理资源被回收之外,还能将输出流缓冲区的数据flush到物理节点里(因为在执行close()方法之前,自动执行输出流的flush()方法)

1.InputStream

InputStream 是所有的输入字节流的父类,它是一个抽象类,主要包含三个方法:

//读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾。 
int read() ; 
//读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1。 
int read(byte[] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值