09.IO流I--01.【IO概述】【IO流继承体系结构】

IO流--1

IO流概述 IO流继承体系结构

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

1.    IO流概述

1). IO流的基础

(1). IO流基础知识

[1]. IO的用途:IO流是用来处理设备之间的数据传输

注意Java对数据的操作通过流的方式进行操作的。

[2]. 早期的Java的IO包都是字节流(体现均为二进制字节)

[3]. 字符流字节流分离出来的用来处理文本数据的流

(2). 字符流的来历

[1]. 字符流产生的背景

{1}. 相同的字符不同的编码表中对应的二进制数字 (也就是码值) 不一样。

{2}. 所以相同的码值 (实际为二进制数字) 对应到不同的码表可能会因为某个码表不存在该码值而出现查找不到对应字符的情况,这样就会出现乱码。

[2]. 字符流的诞生

为了解决乱码的问题,Java字节流的基础上融合了编码表从而产生了字符流。这样使用字符流直接处理文本数据非常方便的

[3]. 字节流通用的,字符流基于字节流的。

2). IO流的抽象基类

(1). IO体系的四个抽象基类

[1]. 字节流抽象基类 ---- InputStream和OutputStream

[2]. 字符流抽象基类 ---- Reader和Writer

四个抽象基类全部位于java.io包

(2). 规律

[1]. 由这四个抽象类派生出来的子类的名称是以抽象父类名称为后缀,以功能前缀

[2]. 所以判定某一个具体的流的父类,就找出它的结尾的类名是什么,它的抽象父类就是什么。

e.g. 一个类的名字叫FileInputStream,它是以InputStream为结尾的,所以这个FileInputStream的抽象父类就是InputStream类。这个类的功能从前缀进行判断。由于前缀是File,所以这个类的功能是用用于处理文件的字节输入流。

2.    IO继承体系结构

1). IO继承体系结构图示

(1). 字符流继承体系结构 (Reader和Writer)


 (2). 字节流继承体系结构 (InputStream和OutputStream)


2). IO四大继承体系相互比较和对应关系

(1). 横向比较 ----对应关系

[1]. WriterReader对应关系说明

{1}. Writer体系中的PrintWriter在Reader中没有对应的类存在

{2}. Reader体系中的PushbackReader和LineNumberReader在Writer中没有对应的类存在

[2]. OutputStreamInputStream对应关系说明

{1}.OutputStream体系中的PrintStream在InputStream中没有对应的类存在

{2}. InputStream体系中的SequenceInputStream、LineNumberinputStream、PushbackInputStreamhe和StringBufferInputStream在OutputStream中没有对应的类存在

(2). 纵向比较I ----字节流和字符流继承体系结构的对应关系

[1]. InputStream中的StringBufferInputStream和Reader中的StringReader对应

[2]. InputStream中的ByteArrayInputStream和Reader中的CharArrayReader对应

对应的原因】就是因为ByteArray表示字节数组,字节中融合编码表就是字符。因此ByteArrayInputStream和CharArrayInputStream对应

[3]. InputStream中的StringBufferInputStream和Reader中的StringReader对应

对应的原因】就是StringBuffer类和String类本身就是前者是后者的缓冲区,可以转换。

[4]. 字节流没有转换流作为子类转换流是字符流的特有子类

[5]. 打印字节流PrintStream比较特殊不是PrintOutputStream,结尾就是Stream。原因就是Print这个词本身就表示“打印”就有向外输出的含义

(3). 纵向比较II -----字节流和字符流继承体系结构的层次变动

[1]. FileInputStream和FileReader/ FileOutputStream和FileWriter

{1}. InputStream中FileInputStream是InputStream的直接子类

{2}. 但是在Reader中确实InputStreamReader直接子类

{3}. 这个原因就是Reader操作文本数据,因此需要编码表,而InputStreamReader恰恰就是将InputStream+编码表融合之后生成需要的字符流,所以在Reader中FileReader就变成了第二级的子类存在。FileOutputWriter也是一样的道理。

[2]. BufferedInputStream和BufferedReader/BufferedOutputStream和BufferedWriter

{1}. BufferedInputStream在InputStream中处于第三级别子类,直接父类是FilterInputStream

{2}. 但是对应的BufferedReader在Reader体系中处于第二级别子类,直接和FilterReader并列。BufferedOutputStream道理也是一样的。

[2]. LineNumberInputStream和LineNumberReader

{1}. LineNumberInputStream在InputStream处于第三级别子类,直接父类是FilterInputStream。

{2}. 但是在Reader继承体系中,LineNumberReader层次仍然是第三级别子类,但是直接跟随BufferedReader脱离了FilterReader

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值