java中的io 流到底咋理解
Java IO(甚至整个电脑的IO)的本质是英文的stream(有溪流之意),比如泉水从岩石里流出,然后流到某一个水潭,那么source(源)可以理解为泉眼、小溪路径是载体、target(目标)是水潭(也可以叫接收者),在java里把可以提供水的源叫Input,而把接收水的目标叫output,类似发电站(输出电流)是input、用电的终端是output,有时候我们会容易把发电站理解为output(似乎他们是电流的输出),所以会造成理解上有点拗。流的用途最重要的是可以把东西从一个地方“运”到另一个地方,比如水、电,而对电脑来说,这个“东西”本质就是字节(byte),把一系列字节从一个地方“运”到另一个地方(从网络下载文件、从文件读取内容发送到网络、从一块内存到另一块内存、从显存到pci-e显卡接口等)。类似的可以在水流接收端放一些过滤器、热水器等来改变流过这些装置的水,还可以每累计到1升水就停一下装瓶等,这些对应java中的流就是各种包装类,比如将字节当着字符看待(unicode下每两个字节一个字符)、或者将字节流压缩等等都是类似的改变流着的东西(字节)或怎么看待字节的问题(读两个字节转换为字符,还是读四个字节转换为整数等等)。
■网友
IO流是处理文件(不只是文件,为简化,这里统称为文件)和程序数据交流的一个通道,InputStream和OutputStream可以理解成相对于我们的程序命名的通道。
InputStream是把文件的数据read到程序中,相对于程序来说,这是一个数据输入通道,所以被称为Input。
反之,OutputStream是把程序中的数据write到文件中,相对于程序来说,这是一个数据输出通道,所以被称为Output。
IO相关的类主要复杂在装饰器模式上,新人使用起来会比较困惑,这里有篇文章讲得很好。直接贴链接了:
对Java Inputstream的一次采访
■网友
对于IO的理解,流这个概念十分重要。举个简单的例子,你用壶往杯子里倒水,壶里的水不可能一下子就跑到被子里,而是需要一个过程。这个过程更像是连续的过程,源源不断进行着。回到计算机上来,举一个计算机硬盘和内存的例子,硬盘需要传1g的数据到内存中以便处理,但是由于传输带宽等方面的限制,1g数据不可能立马就传到内存中,而是需要一点点进行的,就像从壶里往杯子里倒水一样。流这个词,生动形象说明了数据传输的过程。另外IO操作被认为是资源,资源可能被多个程序使用,这就需要考虑资源有限的问题,于是便有了操作系统中的抢占IO。就像你用壶倒水,一般同一时刻只能倒一个杯子一样。
■网友
IO流入门很简单,你只需要理解 inputStream ,outputStream , Reader,Writer这四个基类,其它都是它们的子类,子类只是装饰了不同的功能而已
分成两个方向
字节:inputStream ,outputStream
字符: :Reader,Writer
然后你只需要理解什么是字节,什么是字符,走这两个方向就OK啦
■网友
为什么我觉得 Java 的 IO 很复杂? 【java中的io 流到底咋理解】 刚刚答的,供参考。
■网友
拿现实生活中的例子,流有:水流,人流,流砂,等它们对应的个体是,水,人,砂子,同样的java里面的流也是一样的,常见的字节流(个体是字节),字符流(个体是字符),文件流(个体是文件),等,当然你也可以定义自己的流:如对象流。io是输入输出,那么iostream就是流的输入输出,这里是所有流的抽象,因为每种流需要不同的输入输出处理。
■网友
个人理解,java流是对输入输出设备的抽象
■网友
看这个流用什么包装了,他就是什么了。
推荐阅读
- 联运■连云港港全国首推集装箱铁水联运“一单到底”
- 鄂温克冬季马赛-30℃极寒开赛:寒冬中的火热派对
- 大雪@大雪腌肉 适当进补 今日大雪
- 汽车知识|第八代高尔夫到底值不值得买?1.4T自动Pro版全款多少钱?
- |电商事业中的“闪光少年”
- 人潮汹涌|丁真爆火第20天,到底谁才是真正的“幕后推手”?华春莹为他连发三推
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 微博目前已经支持文本,图片,位置分享,为啥没有语音和视频呢微博的pm肯定想过这两种微博形态,但迟迟不做的原因到底是啥。是语音和视频不符合产
- 什么|到底是什么原因?宝宝易咳嗽
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
