1.做java开发有一段时间了,对java的io类库总是没有较全面的了解,仅仅停留在会使用几个常用api的基础 上。抽空学习了一下,对io类库有了更全面的了解。
2.IO:输入输出,java中使用流的抽象概念来表示。
3.从操作的基本单元的类型划分:可分为面向字节操作的IO和面向字符操作的IO。
3.1.在面向字节操作的IO中,api的设计者认为有关输入的类都继承自InputStream,有关输出的类都继 承自OutputStream。
InputStream又按不同的数据源产生输入划分为不同的类,主要有:
ByteArrayInputStream |
缓冲字节数组当作inputStream |
FileInputStream |
文件当作inputStream |
PipedInputStream |
用于写入PipedOutputStream的数据 |
SequenceInputStream |
将多个InputStream进行逻辑串联成单一的inputStream |
StringBufferedInputStream |
String转成inputStream(jdk1.1开始不建议使用) |
FilterInputStream |
此为装饰器的抽象类 |
对应的OutputStream的主要类有:
ByteArrayOutputStream |
缓冲字节数组当作OutputStream |
FileOutputStream |
文件当作OutputStream |
PipedOutputStream |
用于写出到PipedinputStream的数据 |
FilterOutputStream |
此为装饰器的抽象类 |
3.2.关于FilterOutputStream/FilterInputStream两个抽象类的作用,java设计者采用装饰器模式来实现不 同功 能的组合,而装饰器模式必须具有和其所装饰的对象相同的接口,先看看两个装饰器有哪些具 体装饰功能类
FilterInputStream
DataInputStream |
可以读取不同基本类型数据以及String对象 |
BufferedInputStream |
对数据进行缓冲读取 |
PushbackInputStream |
具有”推回”一个字节的功能 |
CheckInputStream |
可对读取数据校验 |
InflaterInputSream |
具有对输入数据解压缩功能 |
DeflaterInputSteam |
具有对输入数据压缩数据功能 |
FilterOutputStream
DataOutputStream |
可以写出不同基本类型数据以及String对象 |
BufferedOutputStream |
对数据进行缓冲写出 |
PrintStream |
格式化输出(能够方便地打印各种数据值表示形式,指定字符编码,提供两项其他输出流同的功能:1.永远不会抛出 IOException,异常情况仅设置可通过 checkError 方法测试的内部标志;2.自动刷新--自动调用 flush 方法println 方法,写入一个换行符) |
CheckOutputStream |
可对写出数据校验 |
InflaterOutputSream |
具有对输出数据解压缩数据功能 |
DeflaterOutputSteam |
具有对输出数据压缩数据功能 |
3.3.我可以对InputStream和OutputSream进行功能的组合操作,如对数据缓冲再格式化输出。
4.JDK又为我们提供另一种形式的IO操作----面向字符的IO操作,think in java的作者说面向字符形式的IO 提供兼容Unicode的功能,主要是为了国际化,且比面向字节形式IO要更快。同样,api的设计者认为 有关输入的类都继承自Reader,有关输出的类都继承自Writer。
按不同的数据源产生划分
Reader
BufferedReader |
缓冲字符数组当作Reader(与InputStream的不同,此类直 接继承Reader类) |
CharArrayReader |
缓冲字符数组当作Reader |
PipedReader |
传送的字符输入流 |
StringReader |
字符串的读取 |
InputStreamReader |
此为适配器类(是字节流通向字符流的桥梁,使用指定的 charset 读取字节并将其解码为字符) |
FilterReader |
此为装饰器的抽象类 |
Writer
BufferedWriter |
缓冲字符数组当作Writer |
CharArrayWriter |
缓冲字符数组当作Writer |
PipedWriter |
传送的字符输出流 |
StringWriter |
字符串的写出 |
PrintWriter |
向文本输出流打印对象的格式化表示形式 |
OutputStreamWriter |
此为适配器类(是字节流通向字符流的桥梁,使用指定的 charset 读取字节并将其解码为字符) |
FilterWriter |
此为装饰器的抽象类 |
4.1.上图看出Reader,Writer与InputStream,OutputStream在类的组织结构上大致相似,但不完全相同。
4.2.关于在字符流体系中将文件流(FileReader/FileWriter)作为适配器的子类来实现。
5.最后附上一张从网上下的结构图
6.文章参考thinking in java。
相关推荐
**Factory IO** 是一款强大的工业自动化领域的仿真软件,它提供了高度真实的3D环境,用于模拟和测试各种生产线。用户可以通过Factory IO创建、设计并优化工业生产流程,无需实际硬件即可进行系统验证和故障排查。这...
通过阅读"rapidio介绍"和"rapidio_3g"这两个文档,我们可以更深入地理解RapidIO的最新发展,例如3G版本可能引入的新特性和优化,以及如何将这些知识应用于实际的系统设计和实施中。学习RapidIO不仅可以提升对嵌入式...
AC6102IO口详细功能图片介绍
诸葛io是一款专注于数据智能决策的平台,自2014年开始研发,致力于帮助企业实现用户全生命周期的数据采集、分析和决策。这款产品凭借其创新的UTSE(用户、触点、会话、事件)用户行为分析模型,已经在众多知名企业中...
2. **Socket.IO介绍** - **Socket.IO提供了一种简单的方式来实现WebSocket协议,同时还提供了对其他多种浏览器兼容的 fallback 技术,确保在WebSocket不支持的环境中也能实现实时通信。 - **事件机制**:Socket.IO...
socket.io实时通讯入门讲解PPT,并有代码示例。
单片机IO口是单片机中非常关键的部分,它是指单片机内部集成的输入/输出端口,用于与外部设备进行数据交互。IO口的每个引脚既可以配置为输入模式,接收外部信号,也可以设置为输出模式,驱动外部负载。在单片机的...
**socket.io介绍** socket.io是一个实时应用程序框架,它在WebSockets之上提供了一层抽象,处理了WebSockets的一些不足,如连接不稳定和浏览器兼容性问题。socket.io支持多种传输机制,包括WebSocket、polling等,...
Socket.IO介绍** Socket.IO的主要目标是提供在所有浏览器和移动平台上进行实时、低延迟、跨域的双向通信。它在WebSocket之上做了封装,自动处理WebSocket的不足,如不支持旧版浏览器的问题,以及在网络不稳定时的重...
单片机IO口介绍
施耐德QUANTUM 系列PLC分布式IO模块介绍 一、总体介绍 施耐德QUANTUM 系列PLC分布式IO模块是用于工业自动化控制的高性能IO模块。该模块系列具有高灵活性、可靠性和可扩展性,广泛应用于工厂自动化、过程控制和...
《串行RapidIO技术详解》 RapidIO技术,作为一种专为高性能嵌入式系统设计的芯片间和板间互连技术,是应对日益增长的带宽需求、降低成本、提高系统灵活性和可靠性的关键解决方案。它的发展源于嵌入式系统在通信、...
1. **协议基础**:介绍 RapidIO 协议的基本概念,包括协议架构、数据包格式、地址映射和错误处理机制。 2. **物理层与接口**:解释不同物理层实现的细节,如电气接口标准、光接口标准,以及信号编码和解码。 3. **...
罗克韦尔自动化是全球知名的工业自动化解决方案提供商,其分布式输入/输出(IO)系统在工业控制领域扮演着重要角色。...详细内容可以在“分布式IO系统介绍.pdf”文件中找到,该文件应提供更深入的技术细节和案例分析。
《易福门IO-Link技术详解》 IO-Link是一种开放的、标准化的通信协议,主要应用于工业自动化领域的传感器和...通过下载"易福门IO-Link介绍"的资料,可以更深入地了解这一技术,为企业的自动化升级提供有力的技术支持。
Socket.IO 学习教程之基础介绍 Socket.IO 是一个基于事件的实时双向通讯库,它提供了实时的双向通讯功能,使得 Web 应用程序可以实时地传输数据。Socket.IO 的出现解决了传统 AJAX 轮询的延时和服务端负载的问题。 ...
### Arduino数字IO和模拟IO详解 #### 一、数字输出 ...通过上述五个方面的详细介绍,我们可以清晰地了解到Arduino在数字IO和模拟IO方面的工作原理和技术细节,这对于学习和应用Arduino来说是非常关键的基础知识。
在本文中,我们将详细介绍系统 IO 和标准 IO 的定义、特点、函数调用及应用场景。 一、系统 IO 和标准 IO 的定义 系统 IO 又称文件 IO 或低级磁盘 IO,是一种不带缓存的 IO 操作,它提供了基本的 IO 服务,特定于 ...
- **文件I_O操作.pdf**:这个文件可能会介绍Linux下文件IO的各种操作,如文件打开、关闭、读写以及相关的系统调用和错误处理。 通过阅读这些文档,初学者可以更全面地了解Linux下的IO机制,以便在实际编程中选择最...
### IO模型介绍 #### 一、IO概述 **IO**,即输入(Input)与输出(Output),是计算机系统中数据交互的基础。数据通过IO类库在内部表示与外部表示之间进行转换,这一过程涉及多种步骤和技术。 #### 二、内部表示与...