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中可以指定内存区域的大小

猜你喜欢

转载自www.cnblogs.com/inspred/p/10807164.html