Java 的 I/O 类库的基本架构

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java 的 I/O 类库的基本架构脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。Java 在 I/O 上一直在做持续的优化,如从 1.4 开始引入了 NIO,提升了 I/O 的性能。
Java 的 I/O 操作类在包 java.io 下,但是这些类大概可以分成四组,分别是:
1.基于字节操作的 I/O 接口:InputStream 和 OutputStream;
2.基于字符操作的 I/O 接口:WrITer 和 Reader;
3.基于磁盘操作的 I/O 接口:File;
4.基于网络操作的 I/O 接口:Socket,Socket类没在java.io包里。
这里只介绍字节操作和字符操作架构和字节字符转换架构,具体实现方法将会在新的文章撰写。

基于字节的 I/O 操作接口

基于字节的 I/O 操作接口输入和输出分别是:InputStream 和 OutputStream,InputStream 输入流的类继承层次如下图所示:

Java 的 I/O 类库的基本架构

输入流根据数据类型和操作方式又被划分成若干个子类,每个子类分别处理不同操作类型;
OutputStream 输出流的类层次结构也是类似,如下图所示:

Java 的 I/O 类库的基本架构

操作数据的方式是可以组合使用的,如这样组合使用:

OutputStream out = new BufferedOutputStream(new ObjectOutputStream(new FileOutputStream("fileName"));

流最终写到什么地方必须要指定,要么是写到磁盘要么是写到网络中,其实从上面的类图中我们发现,写网络实际上也是写文件,只不过写网络还有一步需要处理就是底层操作系统再将数据传送到其它地方而不是本地磁盘

基于字符的 I/O 操作接口

不管是磁盘还是网络传输,最小的存储单元都是字节,而不是字符,所以 I/O 操作的都是字节而不是字符,但是为啥有操作字符的 I/O 接口呢?这是因为我们的程序中通常操作的数据都是以字符形式,为了操作方便当然要提供一个直接写字符的 I/O 接口,如此而已。我们知道字符到字节必须要经过编码转换,而这个编码又非常耗时,而且还会经常出现乱码问题,所以 I/O 的编码问题经常是让人头疼的问题。

Writer 相关类层次结构:
Writer 类提供了一个抽象方法 write(char cbuf[], int off, int len) 由子类去实现。

Java 的 I/O 类库的基本架构

Reader 类层次结构:

Java 的 I/O 类库的基本架构

读字符的操作接口中也是 int read(char cbuf[], int off, int len),返回读到的 n 个字节数,不管是 Writer 还是 Reader 类它们都只定义了读取或写入的数据字符的方式,也就是怎么写或读,但是并没有规定数据要写到哪去。

字节与字符的转化接口 

InputStreamReader 类是字节到字符的转化桥梁,InputStream 到 Reader 的过程要指定编码字符集,否则将采用操作系统默认字符集,很可能会出现乱码问题。StreamDecoder 正是完成字节到字符的解码的实现类。也就是当你用如下方式读取一个文件时:

try {              StringBuffer str = new StringBuffer();              char[] buf = new char[1024];              FileReader f = new FileReader("file");              while(f.read(buf)>0){                  str.append(buf);              }              str.toString();   } catch (IOException e) {}

FileReader 类就是按照上面的工作方式读取文件的,FileReader 是继承了 InputStreamReader 类,实际上是读取文件流,然后通过 StreamDecoder 解码成 char,只不过这里的解码字符集是默认字符集。
写入也是类似的过程:
通过 OutputStreamWriter 类完成,字符到字节的编码过程,由 StreamEncoder 完成编码过程。

脚本宝典总结

以上是脚本宝典为你收集整理的Java 的 I/O 类库的基本架构全部内容,希望文章能够帮你解决Java 的 I/O 类库的基本架构所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。