Java I/O的机制
来源:互联网 发布:软件工程项目管理论文 编辑:程序博客网 时间:2024/05/16 15:38
前言
I/O问题是整个人机交互的核心问题,同样Java提供了丰富的操作I/O的类,此处只讨论java.io包中的63个类(除去Exception类和Error类),根据数据格式和传输方式可以分成四类(平时可能使用最多的是字节流和字符流):
(1)基于字节操作的I/O接口:InputStream和OutputStream
(2)基于字符操作的I/O接口:Reader和Writer
(3)基于磁盘操作的I/O接口:File
(4)基于网络操作的I/O接口:Socket
1、基于字节的I/O操作接口
基于字节操作的I/O接口输入和输出分别是InputStream和OutputStream,InputStream的类层次结构如下所示(输入流根据数据类型和操作方式又被划分为若干个子类):
InputStream提供的主要方法:
public int read(byte b[], int off, int len) throws IOException;
OutputStream的类层次结构与InputStream的结构类似:
public void write(byte b[], int off, int len) throws IOException;
至于每个子类的具体操作方式和处理字节流的方式参考jdk1.8文档。
2、基于字符的I/O操作接口
在实际的磁盘操作或是网络操作中,操作的都是字节,而并不是字符,之所以有字符流之说是因为在实际程序中经常使用字符或者字符串,为了操作方便提供字符I/O接口。而不同的字符使用的编码不尽相同,这给在转换成字节时如果使用了不恰当的解码规则就会产生乱码,同时编解码本身也是一个耗时的操作。
基于字符操作的I/O接口输入和输出分别是Reader和Writer,Reader的类层次结构如下所示:
Reader提供的主要方法:
/*** Reads characters into a portion of an array. This method will block* until some input is available, an I/O error occurs, or the end of the* stream is reached.** @param cbuf Destination buffer* @param off Offset at which to start storing characters* @param len Maximum number of characters to read* @return The number of characters read, or -1 if the end of the* stream has been reached** @exception IOException If an I/O error occurs*/abstract public int read(char cbuf[], int off, int len) throws IOException;
Writer的类层次结构与Reader的结构类似:
Writer提供的主要方法:
/*** Writes a portion of an array of characters.** @param cbuf Array of characters* @param off Offset from which to start writing characters* @param len Number of characters to write* @throws IOException If an I/O error occurs*/abstract public void write(char cbuf[], int off, int len) throws IOException;
3、字节与字符的转化接口
数据持久化到磁盘或者在网络上传输的时候都是以字节形式处理的,Java针对字节与字符的转化提供了相应的接口:InputStreamReader和InputStreamWriter。InputStreamReader将字节流解码成字符,InputStreamWriter将字节流编码成字符,不管编码解码均须注意采用的字符集,两种转换均采用了适配器模式(通过InputStreamReader或者InputStreamWriter将InputStream适配成Reader或者Writer)。
字符解码过程(在StreamDecode中存在InputStream和Charset对象用于转化):
字符编码过程(StreamEncoder中存在OutputStream和Charset对象用于转化):
4、File
5、Socket
- Java I/O的机制
- Java I/O 的工作机制
- Java I/O 的工作机制
- java I/O 的工作机制
- Java I/O的工作机制
- Java I/O工作机制
- Java I/O工作机制
- Java I/O工作机制
- Java I/O工作机制
- Java I/O机制总结
- Java I/O 工作机制
- 【Java】I/O工作机制
- Linux的I/O机制
- 深入分析 Java I/O 的工作机制(I/O 调优)
- 深入分析 Java I/O 的工作机制(网络 I/O 优化)
- 深入分析 Java I/O 的工作机制(网络 I/O 优化)
- java深入分析I/O流工作机制02-I/O 类库的基本架构
- 深入分析 Java I/O 的工作机制(网络 I/O 优化)
- C++ 构造函数
- ios 双拉杆
- 程序员面试金典——链表分割
- BZOJ4813: [Cqoi2017]小Q的棋盘
- OCR识别新能源车牌的原理
- Java I/O的机制
- C++ 析构函数
- android开发中遇到的问题汇总【十】
- [JZOJ5052]旅行路线
- Linux创建用户、用户组 及 删除
- hdoj-2040-亲和数(解题报告)
- 【Linux学习笔记】十一、用户和用户组管理
- 五大经典算法之四贪心算法
- C++ 常成员函数