(Java的I/O类库的基本架构)深入分析Java I/O的工作机制

前言:在当今海量数据的时代,数据在网络中随处流动,,在这个流动的过程中都涉及I/O问题,可以说大部分WEB应用系统的瓶颈都是I/O瓶颈。I/O问题是任何语言都无法回避的问题,可以说I/O问题是整个人机交互的核心问题,因为I/O是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O问题尤为突出。

正文:

        Java的I/O操作类在包java.io下,大概有将近80个类,这些类大致可分为如下四组:

  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操作,要么是传输方式影响I/O操作,也就是将什么样的数据写到什么地方的问题。I/O只是人与机器或者机器与机器完成交互的手段,我们关注的是如何提升它的运行效率。而数据格式和传输方式是影响传输效率最关键的因素。

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

输入:InputStream(是字节输入流的顶级父类)

输出:OutputStream(是字节输出流的顶级父类)

1.操作数据的方式是可以组合使用的:

eg:OutputSteam out = new BufferedOutputStream(new objectOutputStream(new FileOutputStream("fileName")));

2.指定流最终写到什么地方去。(要么是磁盘,要么是网络中),写入网络实际上也是写文件,只不过写网络还有一些需要处理。就是让底层操作系统再将数据传送到其他地方,而不是本地磁盘。

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

I/O操作都是以字节为单位进行的,之所以产生字符I/O是程序在平常操作数据的过程中都是以字节为基本单位。为了操作方便从而衍生出来。(字节与字符之间的转化需要编码操作)

写出:Writer

 读入:Reader

三、字节与字符之间的转化

InputStream与OutputStream完成数据的读取

StreamDecoder与StreamEncoder完成解码过程

最终由InputStreamReader与OutputStreamWriter完成最后的转换工作

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值