zoukankan      html  css  js  c++  java
  • 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中可以指定内存区域的大小

  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/inspred/p/10807164.html
Copyright © 2011-2022 走看看