IO流
流的概念
流的本质,数据传输,根据数据传输的特性将流抽象为各种类,方便更直观的进行数据操作。
流的作用:为数据源和目的地建立一个输送通道。
Java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流.
Java中的IO流采用装饰着模式,按功能划分流,可以根据需要动态的装配流以获得想要的功能。
IO流的分类
字节流和字符流
字节流
数据流中最小的单位为字节。
字符流
数据流中最小的单位为字符,Java中的字符采用Unicode编码,一个字符占用两个字节。
输入流和输出流
输入流
程序从输入流读取数据源,数据源包括外界(键盘,文件,网络等)。
输出流
程序向输出流写入数据,将程序中的数据输出到外界(显示器、文件,网络)。
Java的IO流对象
字节输入流(InputStream)
IO中的输入字节流的继承图如下:
- InputStream是所有的输入字节流的父类,它是一个抽象类。
- ByteArrayInputStream、StringBufferInputStream、FileInputStream是三种基本的介质流,他们呢分别从Byte数组,StringBuffer和本地文件中读取数据。
- PipedInputStream是从与其他线程共用的管道中读取数据。
- 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中的字节输出流继承图如下:
- OutputStream是所有字节输出流的父类,它是一个抽象类。
- ByteArrayOutputStream、FileOutputStream是两种基本的介质流,它们分别向byte数组和本地文件中写入数据。PipedOutputStream是向线程公用的管道中写入数据
- 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
字符输入流的继承关系图如下:
- Reader是所有字符输入流的父类,它是一个抽象类。
- CharReader、StringReader是两种基本的介质流,它们分别将Char数组、String中读取数据。PipedReader是从与其它线程共用的管道中读取数据。
- BufferedReader很明显就是一个装饰器,它和其子类负责装饰其它Reader对象。
- FilterReader是所有自定义具体装饰流的父类,其子类PushbackReader对Reader对象进行装饰,会增加一个行号。
- InputStreamReader是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。
主要方法
- public int read():读取一个字符,返回值为读取的字符
- public int read(char cbuf[]): 读取一系列字符到字符数组,返回值为实际读取到的字符数量
- public int read(char cbuf[], int off,int len):读取len个字符,从数组下标off开始存放,返回实际读取字符的数量
字符输出流Writer
字符输出流继承图如下:
- Writer是所有字符输出流的父类,它是一个抽象类。
- CharArrayWriter、StringWriter是两种基本的介质流,它们分别向Char数组、String中写入数据。PipedWriter是向与其它线程共用的管道中写入数据。
- BufferedWriter是一个装饰器为Writer提供缓冲功能。
- OutputStreamWriter是OutputStream到Writer转换的桥梁,它的子类FileWriter其实就是一个实现此功能的具体类
来源:CSDN
作者:lvch0501
链接:https://blog.csdn.net/weixin_42282513/article/details/104611963