美文网首页
Java-IO流的理解

Java-IO流的理解

作者: 黎繁介 | 来源:发表于2018-06-12 14:17 被阅读12次

        在Java中,把不同的输入/输出源(硬盘、文件和网络连接等)抽象的表述为流(Stream),通过流的方式允许Java程序使用相同的方式访问不同的输入/输出源。流(Stream)是从源(Source)到接受(Sink)的有序数据。


一、输入流、输出流

        说白了,就是我们使用程序接收、发送数据到文件或者其他设备的过程中,这些数据不可能瞬间全部发送或接受完成,它们得如同排队一样,按照规则来,这种过程形式就是流,至于怎么个规则法,就看java.io包下的一系列的规定了。

        所以,按照流的划分,有输入流、输出流:

                输入流(以InputStream和Reader为基类):只能从中读取数据,不能够反向向其写入数据。

                 输出流(以OutputStream和Writer为基类):即只能从中写入数据。

InputStream和Reader、OutputStream和Writer作为JavaIO流中涉及的40多个类的4个抽象基类,我们来看输入、输出流的模型图(我们把输入、输出设备抽象理解为水管):


输入流模型图

        输入流使用隐式记录指针来表示当前准备读取的位置,每当程序从InputStream或Reader取出一个或多个水滴后,记录指针自动向后移动相应的单位。

输出流模型图

        输出流同样使用隐式记录指针表示当前水滴即将放入的位置,每当程序向OutputStream或Writer输出一个或多个水滴后,记录指针自动向后移动相应的单位。

关于InputStream、OutputStream和Reader、Writer的区别:前者为字节流,字节流操作的最小数据单元为8位的字节。后者为字符流,字符流操作的最小数据单元为16位的字符。

何时使用何流,我们看图理解一下:

输出流

        我们在划分输入、输出流的时候是根据程序运行时所在的内存来考虑的,所以,从内存→硬盘,使用的应当是输出流!

        从Server到Client的过程中,我们使用网路传输数据,那么Server将数据传输到网络过程中,应当使用的是输出流,而Client从网络中获取数据的过程中,应当使用的是输入流!


二、节点流、处理流

        节点流:从/向一个特定的IO设备(如磁盘等)读/写数据的流称为节点流,也称低级流。(即程序直接连接到数据源)

节点流示意图

 处理流:对一个已经存在的流进行连接或封装,通过封装后的流来进行读/写操作,也称为高级流。

处理流示意图

至于使用处理流有什么好处,我们先来看处理流的模型:

处理流模型

        优点:

                →性能的提高:主要以增加缓冲的方式来提高输入/输出的效率。

                →操作的便捷:处理流提供了一系列的便捷方式来一次性的输入/输出大量的内容,而不是输出/输入一个或多个“水滴”。

        即我们使用处理流,将这些已存在的节点流包装成高级处理流,我们就可以使用相同的代码对这些不同的输入输出设备进行读写操作!

相关文章

  • Java-IO流的理解

    在Java中,把不同的输入/输出源(硬盘、文件和网络连接等)抽象的表述为流(Stream),通过流的方式允...

  • JAVA-IO流的理解

    1.输入流和输出流的方向是相对于内存来说的,从文件/网络等到内存方向的流称为输入流,反之为输出流。2.I/O流根据...

  • Java-IO流

    File类 File类是操作文件和文件目录的类,能新建、删除、重命名、文件和目录 但File类不能访问文件本身的内...

  • JAVA-IO流

    }

  • java-IO流

    1、OutputStream 1.1 OutputStream 主要针对二进制流的操作 1.2 PipedOutp...

  • Java-IO流-Properties

    引出Properties 将一个媒体文件切割成多个碎片 配置文件的建立和读取 Properties,它里面存储的键...

  • Java-IO流-RandomAccessFile

  • Java-IO流(一)

    了解输入输出技术 IO技术中的File对象 如何创建文件对象 File获取文件相关信息 File类中方法-文件以及...

  • Java-IO流对象

    File中的静态成员变量 递归的使用 File中的递归

  • JavaSE-IO输入输出-装饰设计模式

    JAVA-IO 早期IO都是对字节流的操作,但是为了方便操作文本后来出现了字符流。ASCII-英文GB1312-中...

网友评论

      本文标题:Java-IO流的理解

      本文链接:https://www.haomeiwen.com/subject/tuixeftx.html