IO流

吃可爱长大的小学妹 提交于 2020-03-04 18:52:37

流的概念

    流的本质,数据传输,根据数据传输的特性将流抽象为各种类,方便更直观的进行数据操作。
    流的作用:为数据源和目的地建立一个输送通道。
     Java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流.
     Java中的IO流采用装饰着模式,按功能划分流,可以根据需要动态的装配流以获得想要的功能。

IO流的分类

字节流和字符流

字节流

    数据流中最小的单位为字节。

字符流

    数据流中最小的单位为字符,Java中的字符采用Unicode编码,一个字符占用两个字节。

输入流和输出流

输入流

     程序从输入流读取数据源,数据源包括外界(键盘,文件,网络等)。

输出流

     程序向输出流写入数据,将程序中的数据输出到外界(显示器、文件,网络)。

Java的IO流对象

字节输入流(InputStream)

IO中的输入字节流的继承图如下:
输入字节流继承图

  1. InputStream是所有的输入字节流的父类,它是一个抽象类。
  2. ByteArrayInputStream、StringBufferInputStream、FileInputStream是三种基本的介质流,他们呢分别从Byte数组,StringBuffer和本地文件中读取数据。
  3. PipedInputStream是从与其他线程共用的管道中读取数据。
  4. ObjectInputStream和所有的FilterInputStream的自类都是装饰流(装饰器模式的主角)。

InputStream中的三个基本读方法

  • abstract int read():读取一个字节数据,返回读取的数据,如果返回-1,表示读到了输入流的末尾。
  • int read(byte[] b):将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾
  • int read(byte[] b, int off, int len):将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾off指定在数组b中存放数据的起始偏移位置,len指定读取的最大字节数。

流结束的判断:方法read() 返回值为-1,readLine()返回值为null。

字节输出流OutputStream

IO中的字节输出流继承图如下:
字节输出流的继承图

  1. OutputStream是所有字节输出流的父类,它是一个抽象类。
  2. ByteArrayOutputStream、FileOutputStream是两种基本的介质流,它们分别向byte数组和本地文件中写入数据。PipedOutputStream是向线程公用的管道中写入数据
  3. ObjectOutputStream和所有FilterOutputStream的子类都是装饰流。

OutputStream中的三个基本写方法

  • abstract void write(int b):往输入流中写入一个字节。
  • void write(byte[] b):往输入流中写入数组b中的所有字节。
  • void write(byte[] b, int off, int len): 往输入流中写入数组b从偏移量off开始的len个字节的数据。

其他方法

void flush():刷新输出流,强制缓冲区中的输出字节被写出。
void close():关闭输出流,释放和这个流相关的系统资源。

字符输入流Reader

字符输入流的继承关系图如下:
字符输入流继承图

  1. Reader是所有字符输入流的父类,它是一个抽象类。
  2. CharReader、StringReader是两种基本的介质流,它们分别将Char数组、String中读取数据。PipedReader是从与其它线程共用的管道中读取数据。
  3. BufferedReader很明显就是一个装饰器,它和其子类负责装饰其它Reader对象。
  4. FilterReader是所有自定义具体装饰流的父类,其子类PushbackReader对Reader对象进行装饰,会增加一个行号。
  5. InputStreamReader是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。

主要方法

  • public int read():读取一个字符,返回值为读取的字符
  • public int read(char cbuf[]): 读取一系列字符到字符数组,返回值为实际读取到的字符数量
  • public int read(char cbuf[], int off,int len):读取len个字符,从数组下标off开始存放,返回实际读取字符的数量

字符输出流Writer

字符输出流继承图如下:
字符输出流继承图

  1. Writer是所有字符输出流的父类,它是一个抽象类。
  2. CharArrayWriter、StringWriter是两种基本的介质流,它们分别向Char数组、String中写入数据。PipedWriter是向与其它线程共用的管道中写入数据。
  3. BufferedWriter是一个装饰器为Writer提供缓冲功能。
  4. OutputStreamWriter是OutputStream到Writer转换的桥梁,它的子类FileWriter其实就是一个实现此功能的具体类
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!