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

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

Java的I/O操作类在java.io下,大概有将近80个类,这些类大概可以分成如下4组。

  • 基于字节操作I/O接口:InputStreamOutputStream
  • 基于字符操作I/O接口: WriteReader
  • 基于磁盘操作I/O接口: File
  • 基于网络操作I/O接口: Socket

I/O的核心问题要么是数据格式影响I/O操作,要么是传输方式影响I/O操作,也就是将什么样的数据写到什么样的地方的问题。I/O只是人与机器或者机器与机器交互的手段,除了他们能够完成这个交互功能外,我们关注的就是如何提高他的运行效率了,而数据格式和传输方式是影响效率最关键的因素。

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

基于字节的I/O操作接口输入和输出分别是InputStreamOutputStreamInputStream的类层次结构如下图所示。

在这里插入图片描述

输入流根据数据类型和操作方式又被划分成若干个子类,每个子类分别处理不同的操作类型。OutputStream的类层次结构也类型。
在这里插入图片描述

有两点需要说明,一是操作数据的方式是可以组合使用的。如这样组合使用:

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

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

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

​ 我们程序中通常操作的数据都是字符形式的,为了操作方便需要提供一个直接写字符的I/O接口。而从字符到字节必须要经过编码转换,而这个编码又非常耗时,而且还会经常出现乱码,所以I/O的编码问题经常是令人头痛的问题。

​ 下图所示是写字符的I/O操作接口涉及的类,Writer类提供了一个抽象方法write(char cbuf[],int off,int len
在这里插入图片描述

​ 读字符的操作接口是int read(char cbuf[],int off,int len),返回读到的n个字节数,不管是Writer还是Reader类,它们都只是定义了读取和写入数据字符的方式,但是并没有规定数据要写到哪里。
在这里插入图片描述

字节与字符的转换接口

​ 数据持久化或网络传输都是以字节进行的。所以必须要有从字符到字节或者字节到字符的转换。从字符到字节需要转换,其中读的转换过程如下图所示。
在这里插入图片描述

InputStreamReader类是从字节到字符转换的桥梁,从InputStreamReader的过程要指定编码字符集,否则将采用操作系统默认的字符集,很可能会出现乱码问题。

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类,实际上是读取文件流,然后通过StreamDeocder解码成char,只不过这里的解码字符集是默认字符集。

​ 写入也是类似的过程,如下图所示
在这里插入图片描述

​ 通过OutputStreamWriter类完成了从字符到字节的编码过程,有StreamEncoder完成编码过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值