为了账号安全,请及时绑定邮箱和手机立即绑定

java I/O流 (简单梳理)

标签:
Java 产品

首先将自己定位为一个编程人员,而不是一个用户的角度。一般的用户角度,键盘是输入,显示器是输出,但是对于程序员来说,程序进入内存是输入,程序进入硬盘是输出。
我们程序员的主要的操作就是从硬盘进行读取,加载到内存中运行。这就是读取,然后程序运行的结果输出保存到硬盘上,这就是写入,储存。
也就是以程序的储存于运行过程,以内存与硬盘位工作场所来定位。所以首先要改变我们的用户习惯为程序员思维。
系统提供了一个非常经典的输入输出的通道。
就在这里。
Scanner input=new Scanner(System.in);
System.Out.prientln(“”);
从键盘输入,从控制台输出。
有了这个思维的认识,那么输出流与输入流就很好理解了。outputStrenm—输出流就是内存到硬盘。
inputStream—输入流就是硬盘到内存。
一般的内存中都是运行的程序,硬盘中存储的都是数据。称之为,数据源或者目标数据源。
而这个流就是有方向的数据传送通道,就好比家里面的自来水进,污水出的通道。方向不能搞错,不然会出大问题的。
所以如果想进行设备,平台,客户端等之间的传递,第一步就是建立有特定方向的管道。不能你想和情人说情话,却把电话打到老婆那里吧。所以第一步就是建立目标文件。
FileInputStream fis= new FileInputStream("text.txt");
FileOutputStream fos = new FileOutputStream(“text.txt");
(“text.txt")里面的是相对路径,也可以是绝对路径。唯一注意的就是/或者\才是代表子目录的意思。
当然因为这些事系统封装的方法,所以名义上的第一步是导入相关的方法。
既然我们可以自己定义输入输出的方向,那么是不是也可以对系统提供的经典输入输出进行改造呢,当然可以,这就是重定向标准I/O。
甚至本地文件、远程数据库等。Java的I/O在文件数据的读写、数据的网络发送与接收等很多场合发挥着重要作用。
返回思路。给予程序员的角度。
同样读写我们也可以很好的理解了。
Reader—读取就是从硬盘中读取到内存中。
Writer—写入就是从内存写入到硬盘中。
读写同样有方向性,不然我们写入到内存当中,一旦断点,所有数据将清零,不复存在。不一样的是流是名词,读写是动词。
这样定义就是为了建立一个数据流通的秩序,并没有什么实际内层,所以我们应该注意到这四个概念都是抽象的类。
而我们要用这些方法,就不能用new,只能用他们的子类实现类来操作。而下图八个小方框就是具体的子类。是我们可以直接创建的对象。

图片描述

我们还注意到图下面的字节流与字符流的概念。
因为字节是计算机数据储存的而基本单位,是通用的八位储存方式,好处就是通用性,可是对于面向对象来说,字节流我们一般都看不懂,还需要将字节装化为我们能基本看得懂的字符,于是16位的字符流应运而生。所以一般来说我们很少用到字节流,大多数情况用的都是字符流,而且字符流16位字节,速度也可能更快一些吧。
不过还是有些文件的储存方式还是我们不能直接看懂的,比如二进制。一般的jpg图片就是如此,所以特定生出来了一对Data的字节流来增加我们的学习难度。
实在是想fuck java以及一切储存格式。为什么不统一。如果只有一种储存格式,一种文件类型改多好。
言归正传。
那buffer是什么呢。也就前面String升级版Stringbuffer。的应用。算是增加了缓冲区的意思,减少了对象再内存中无谓增加的资源,减少了代码,增加了内存利用率。

其实剩下的就没有啥可说的了,无非是具体的方法,这些api文档才是权威。只不过我们需要找到常用的方法来学习。通过通用的学习一般的都有的方法,在通过特有的学习每个类所特有的方法,还可以借此区别增加记忆。

在文章的最后说一句。一定要记住——关键要程序中时常刷新和程序最后必须关闭。

点击查看更多内容
5人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消