Java学习篇之IO流相关知识梳理

来源:互联网 发布:云计算paas平台 编辑:程序博客网 时间:2024/06/10 20:44

  学IO流的时候感觉有点凌乱,各种类!!!这个可以理解,微微有点闹心的是这些类的名字老长了,而且有的还很相似,颇有种“猜猜我是谁”的赶脚,不过,一切凌乱都源自自己不注意总结,故今天放下了其他事情,认真总结了一番:

  先上一张图:

  上图是用XMind画的,第一次用,感觉不太习惯,有一些关联线并没有添加上去,不过,标签也能体现出一些联系,下面就根据自己目前的理解将这些知识穿起来。

  关于IO的应用,就得提到我们每天接触电脑时候常用的两个基本操作了——读写。所以,学习IO流的最终目的就是为了读写,上图中,四大基类中Reader类和InputStream类是负责“读”操作的,剩下的两个负责“写操作,当我第一次接触它们的时候,很是疑惑,为什么带“in”的类是负责“读操作”的,和日常感知貌似不一样,后意识到我们学习的是编程语言,考虑任何事情都应该清楚自己的立场,我们应该把自己当成程序本身,所以利用编程语言获取本地的数据的时候,就是in,而利用程序语言将一些数据写到本地的时候,相对于程序而言就是out,如此解释,希望读者可以理解。

  解释完上述内容,就可以继续述说自己的理解了,读者也许会疑惑,为什么四个基类中要用两个类负责写,另外两个类负责读?答案很简单,“能力是有限的”,Reader类和Writer类只能对文本文件(注意:凡是打开后可以被人类看懂的都是文本文件,不要局限于txt文件)进行读写操作,而InputStream类和OutputStream类可以对任何文件进行读写操作,所以,它们两个属于“字节流”,而Reader类和Writer类属于“字符流”。

  由于以上叙述的父类不能被实例化,所以我们只是学习它们的方法,而用它们的子类(FileReader,FileWriter,FileInputStream,FileOutputStream)进行具体的操作,好比儿子继承了老子的衣钵,老子去颐养天年了,哈哈……

  如此一来,上图中就剩“转换流”和那个“高速载体”没有讲述了,其实我这个渣渣也不知道它们属于哪个类,放在上图中是为了根据自己的理解讲解它们之间的协作关系,如果读者有兴趣,就自己去查API文档吧!

  我们刚刚接触JAVA的时候,都会学习JDK,JRE和JVM之间的关系,其中,JVM就是为了实现跨平台的,为什么它有这样的功能呢?因为它相当于是一个翻译官,在IO流学习这块,转化流其实也相当于是个翻译官,只不过实现的不是跨平台,而是“跨编码”(GBK码和UTF-8码),转化流可以实现字节和字符之间的转化,利用不同编码表之间的识别功能,即信息的等效显示

   好了,上边说的是“转换流”,现在说最后一个知识点——“缓冲流”,即上图中用红色星星标识出来的那些,与其说它是缓冲流,不如把它当成是“运载火箭”,为了达到高效的执行速度而产生的一种载体,那么这个“交通工具”都能承载什么样的乘客(参数)呢?顾名思义,就是字符高效载体承载字符流,字节高效载体承载字节流。

  总结

  IO流的学习过程中,我们可以有一种这样的体会,就是这部分的一系列构造方法基本上遵循的都是“装载”思想,最开始学习File类,它的构造方法的参数都是一个路径,如此一来,路径就被封装成了一个File对象,这个File对象就成了一个参数,搭载着字符流或者字节流这趟列车,帮助它们完成相应的读写使命,之后,由于“语言不通”带来的困扰,转换流出来“拯救世界”,让字节流和字符流之间通过它可以互通,程序的世界中,高效是始终不变的追求,不然,用户会翻脸不认人,这时候,“缓冲流”这个运载火箭就出来圆场了。

  综上所述,给我32个赞可好?好评返代码,具体见下篇~

1 0