Java IO整体架构

一、简介

IO(输入输出)问题是Web应用所面临的的主要问题这一,因为在当前这个海量数据时代,数据在网络中随处流动。在这个数据流动的过程当中都涉及IO问题,大部分应用系统的瓶颈都是IO瓶颈。

二、Java IO类库基本架构

①基于字节操作的抽象类:InputStream/OutputStream(处理媒体数据)
②基于字符操作的抽象类:Writer/Reader(处理文本数据)
③基于磁盘操作的抽象类:File
④基于网络操作的类:Socket

前两组主要是传输数据的数据格式,后两者主要是传输数据的方式。

IO的核心问题要么是数据格式影响IO,要么是传输方式影响IO,也就是将什么样的数据写到什么地方的问题。

三、Java IO类型划分

Java 中 IO 流分为几种?

1.按照流的流向分,可以分为输入流和输出流;
2.按照操作单元划分,可以划分为字节流和字符流;
3.按照流的角色划分为节点流和处理流。

按操作方式分类结构图:
在这里插入图片描述
按操作对象分类结构图:
在这里插入图片描述
各种API通常组合使用

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

两点问题:
①操作数据的方式是可以组合使用的(装饰器模式)
②必须要指定流最终要写到什么地方或读取什么地方的流数据

四、既然有了字节流,为什么还要有字符流?

问题本质想问:不管是文件读写还是网络发送接收,信息的最小存储单元都是字节,那为什么 I/O 流操作要分为字节流操作和字符流操作呢?

回答:在我们的程序中通常操作的数据都是字符形式的,为了操作方便当然要提供一个直接读写字符的IO接口,而且字符流是由 Java 虚拟机将字节转换得到的,问题就出在这个过程还算是非常耗时,并且,如果我们不知道编码类型就很容易出现乱码问题。

如果音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好。

五、字节字符相互转换

数据持久化或网络传输都是以字节进行的,所以必须要有两者之间的相互转换。

InputstreamReader类是字节到字符的转化桥梁,从inputstream到reader的过程要指定编码字符集,否则采取操作系统默认字符集,很可能出现乱码。StreamDecoder正是完成从字节到字符的解码实现类。

OutputstreamWriter类完成了从字符到字节的编码过程,由StreamEncoder完成编码过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值