java 输入流,输出流和缓冲区的个人学习感悟

来源:互联网 发布:艾媒 人工智能产业图谱 编辑:程序博客网 时间:2024/05/18 01:01

2015年国庆以后,很庆幸加入了我们学校的"移动互联网实验室",当时加入实验室只是一个C语言和java语言初学的毛头小子。2015国庆年至2015年12月完成了小组之间的第一个任务“趣味测试”,现在觉得好low,也是在这一段时间自己接触了Android开发,初学了一些关于Android的基础知识。2016年3月开学归来,转眼之间就是大二下学期,参加了人生中第一个项目“i西科”app产品的研发,3月到4月阶段基本出于阅读该APP的源代码阶段,大致在4月份左右,师兄师姐都准备春招,所以实验室的主力基本变成了我们这些大二的毛头小子,实验室的老师也若由我们折腾。在一边上课一边研发中(遗憾的是数据结构没学好),时间就到了9月份,在这之前,自己在网上浏览器大量关于Androd开发的知识(自己学习中遇到的),当然在这过程中自己也没做一些有用的笔记,但自己遇到过的问题大多存储在记忆中,同时喜讯传来师兄师姐都拿到了不错的offer,比如京东,美团,去哪,百度,新浪等大型企业。9月份,自己也就是大三了,10月份,自己带领一个四人小组的团队完成了实验室老师拿到的一个项目(这时"外包"这个名词进入了我们记忆中),我们用很P的技术,很P的编码格式完成了该项目,在这过程中被老师骂的天翻地覆。11月份,有重回"i西科"这个项目组,负责后期APP的完善工作,花了大量时间优化代码。到了2017年,一个新的开始,我们有当初的小鲜肉转变为老腊肉,跟随师兄师姐的步伐,准备春招(体验一下,为暑假的秋招做准备)。春招长话短说,大中型企业注重基础,当然985/211这些学校里人们的潜意识里比我们这种二流的本科学校基础好了不知几倍,确实如此,在春招这个过程中,自己发现基础真是硬伤,(虽然接到去哪儿(没面)和阿里的面试,自己面得一塌糊涂)。

以上知识笔者回忆一下之前学习经历得感慨,读者可自行掠过。

以前写代码时,关于文件得输入输出和缓冲,虽然了解,但是没仔细想想里面得机制,这些天又重读了一下java方面得书,顺便总结一下,当作笔记。

学过物理得读者相信一定知道参考系这个概念,其中提到了相对和绝对等概念,在这里的java输入和输出是相对而言。

“流”是一种相对概念,从键盘输入数据,将处理结果写入文件,以及读取文件的内容等动作都可视为流的操作。流里面的数组又字符(charater)和位(bits)构成,看下图有助于理解。


在java中,可以通过InputStream,,Reader类来处理输入,OutputStream,Writer类来处理输出(Reader和Writer可以参照上图来理解)。其中InputStream和OutputStream来处理二进制文件(例如服务器发来的数据中含有一个下载链接,就要转化为InputStream来下载了),而Reader和Writer是用来处理纯文本文件(text file)。

笔者在这取个例子 :

“文件的读取”

       1:你要读取文件,首先要获取一个读取文件的对象,例如FileReader 类的对象 fileReader(用流来解释解释:文件的数据读取到程序中,即为输入流)

2:根据获取到的对象 fileReader来实现文件里面的数据读入到程序里面(文件在外存,即硬盘或磁盘,程序在内存)

3:得到了全部数据之后,你就要把读取文件的对象关掉,即回收或kill掉

“文件的写入”

1:你要从把程序里面的数据写入到文件里面,首先要获取一个写入文件的对象,例如FileWriter类的对象fileWriter(用流来解释:程序的数据写入到文件中,即为输出流)

2:根据获取到的对象fileWriter来实现程序的数据写入到程序里面

3:数据写完之后,你就要把写入文件的对象关掉,即回收或kill掉


接下来,我们再说说缓冲区(buffer)

缓冲区其实就是文件和程序之间访问的桥梁。具有缓冲区的文件处理方式是在访问时先把数据放置到缓冲区,而不是直接从磁盘中读取,这种处理方式的好处是不需要不间断的从磁盘读取数据,因此可以增加程序执行的效率。缺点也就很明显了,缓冲区既然要存储数据,那肯定需要暂用内存了,现在一般pc的内存是4G或8G,还有就问你电脑系统死机或文件没有关闭,缓冲区的数据何去何从?

下面我们画图来解释这种结构吧

相信读者看了上图也就懂了,笔者也就不做过多介绍了。

0 0
原创粉丝点击