• IO系列之一:IO基础概念


    一,流

    Java程序通过流来完成输入/输出,流通过Java的输入/输出系统与物理设备链接,一套输入/输出类和方法适用于所有类型的外部设备,这意味着一个输入流能够抽象多种不同类型的输入,从磁盘文件,从键盘或从网络套接字。

    同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。

    二,输入/输出流

    1,输入/输出是相对于程序来说的,程序在使用数据时所扮演的角色有两个:一个是源,一个是目的。若程序是数据流的源,数据数据流对程序来说是一个"输出数据流"(即数据流向程序为输入流,数据从程序流出为输出流)。

    2,输入输出时,数据在通信通道中流动,信息通道就是一个数据流,只要是数据从第一个地方 "流" 到另外一个地方,这种数据流动的通道都可以称为数据流。

    三,输入/输出类

    从功能上分:输入流/输出流

    从流结构上分:

      字节流:以字节为处理单位

      字符流:以字符为处理单位

    字节流的输入流和输出流基础是 InputStream / OutputStream

    字符流的输入,输出的基础是抽象类 Reader / Writer

    注意:在最底层,所有的输入/输出都是字节形式的

    分类:

      字节流    字符流

      InputStream  Reader

      OutputStream  Writer

    四,输入流

    1,读数据的逻辑

      open a stream

      while more information

      read information

      close the stream

    五,输出流

    1,写数据的逻辑

      open a stream

      while more information

      write information

      close the stream

    六,流的分类

    1,节点流:从特定的地方读写的流类,比如:磁盘或一块内存区域

    节点流是直接和设备打交道的,比如要从文件中读取信息,我们会创建一个FileInputStream流对象,FileInputStream是直接和文件相连的,因此它称为节点流

    2,过滤流:使用节点流作为输入或输出,过滤流是使用一个已经存在的输入流或输出流链接创建的

    我们可以对FileInputStream进行包装,比如包装成一个带缓冲的流(BufferedInputStream),BufferedInputStream就是一个过滤流,它一定是依附于一个节点流创建出来的(构造方法中接收节点流),节点流是和目的地直接交互的,过滤流是对节点流的包装,包装好的节点流还可以再次包装。

    七,Java.io包中InputStream的类层次

                FileInputStream        

                ByteArrayInputStream       DataInputStream

    InputStream --继承-->   FilterInputStream      --继承-->     BufferedInputStream

                ObjectInputStream        LineNumberInputStream

                PipedInputStream         PushbackInputStream

                SequenceInputStream

                StringBufferInputStream

    直接继承自FilterInputStream的是过滤流

    直接继承自InputStream,而不继承FilterInputStream的是节点流

    八,Java.io包中 OutputStream的类层次

                FileOutputStream

                ByteArrayOutStream       DataOutputStream

    OutputStream  --继承--> FileterOutStream  --继承-->    BufferedOutputStream

                ObjectOutputStream       PrintStream

                PipedOutputStream

    九,IO流的链接:

    1,InputStream Chain

    文件     ----->    FileInputStream    ----->    BufferedInputStream      ----->        DataInputStream     ----->     数据

             从文件中获取输入字节流         增加了缓冲的功能        增加了读取Java基本数据类型的功能,

    2,OutputStream Chain

    数据     ----->    DataOutputStream    ----->    BufferedOutputStream      ----->        FileOutputStream     ----->     数据

            可以往输入流中写入Java基本数据类型   提供数据写入到缓冲区的功能        将数据写入到文件中

    缓冲区其实就是一块内存区域,在NIO中可以指定内存区域的大小

  • 相关阅读:
    c# 通过Windows服务启动外部程序
    MVC 视图页对数字,金额 用逗号 隔开(数字格式化)
    mvc4 @foreach 如何写@if 判断
    最小生成树Prim算法和Kruskal算法
    Triangle War
    定制kickstart重建CentOS7.5镜像用于U盘引导安装
    有限状态机FSM
    最短路经算法简介(Dijkstra算法,A*算法,D*算法)
    利用/dev/urandom文件创建随机数
    A*搜索算法
  • 原文地址:https://www.cnblogs.com/inspred/p/10807164.html
Copyright © 2020-2023  润新知