java输入输出--I/O流的概念和划分

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daicooper/article/details/80955583

理解数据流

数据流(Stream)是一组有顺序的,有起点的,有终点的字节集合,是对输入和输出的总称和抽象。

一般地,数据流分为 输入流(InputStream)和输出流(OutputStream)。输入流只能读不能写,而输出流只能写不能读。通常程序使用输入输出流,就好像数据流入程序,或从程序流出。

Java 程序通过流来完成输入输出。 流通过 java 的输入输出系统与物理设备连接,尽管与它们连接的物理设备不尽相同,所有流的行为具有同样的方式。这样,相同的输入输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。流是处理输入输出的一个简便的方法。

把输入流的指向称作为数据源(Data Source),把输出流的指向称作数据接收器(Data Sink),程序从数据源读入数据,向接收器写数据,如下示意图:
这里写图片描述

java 流的划分

Java2 定义了两种类型的流: 字节流字符流。字节流(Byte Stream)为处理字节的输入和输出提供了方法。例如:使用字节流读取或书写二进制数据。字符流(Character Stream)为 字符的输入和输出提供了方便。它们采用了统一的编码标准,因而可以国际化。 在某些场合,字符流比字节流更有效。

需要说明的是,在最底层,所有的输入输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。

字节流类

字节流在顶层由两个抽象类:InputStream 和 OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件,网络连接,甚至是内存缓冲区。

字节输入流 如下图所示,灰色背景的类在使用的时候,需要具体的物理设备,如文件、数组、管道等。白色背景的类(抽象类除外)在使用时,需要其他流的支持。
这里写图片描述
字节输入流的说明如下:

描述
InputStream 表示输入字节流的抽象类
FileInputStream 文件字节输入流
ByteArrayInputStream 字节数组输入流,把字节数组作为数据源
FilterInputStream 过滤字节输入流,提供扩展功能的输入流
PipedInputStream 管道输入流,可用于线程之间通信
ObjectInputStream 对象输入流
SequenceInputStream 顺序输入流,把多个流顺序合并成一个流
AudioInputStream 音频输入流
BufferedInputStream 缓冲输入流
CipherInputStream 加密输入流,在输入过程中,对数据进行加密或解密
DataInputStream 包含读取 Java 标准数据类型方法的输入流
DigestInputStream 摘要数据流,在输入过程中,生成流的数组摘要
ProgressMonitorInputStream 过程监视输入流
PushbackInputStream 能够向输入流退回一个字节的输入流

字节输出流的说明如下:
这里写图片描述

描述
OutputStream 表示输出字节流的抽象类
FileOutputStream 文件字节输出流
ByteArrayOutputStream 字节数组输出流,把字节数组作为数据接收器
FilterOutputStream 过滤字节输出流,提供扩展功能的输出流
PipedOutputStream 管道输出流,可用于线程之间通信
ObjcetOutputStream 对象输出流
BufferedOutputStream 缓冲输出流
CipherOutputStream 加密输出流,在输出过程中,对数据进行加密或解密
DataOutputStream 包含写 Java 标准数据类型方法的输出流
DigestOutputStream 摘要数据流,在输出过程中,生成流的数字摘要
PrintStream 打印流,包含 print() 和 println()的输出流

抽象类 InputStream 和 OutputStream 定义了实现其他流类的关键方法。最重要的两种方法时 read() 和 write() ,它们分别用于读写字节。 两种方法都在 InputStream 和 OutputStream 中被定义为抽象方法。它们被派生的流类重写。

字节流中还有一个流:RandomAccessFile ,支持随机地存取文件中的内容。

字符流类

字符流类顶层由两个抽象类:Reader 和Writer。这些抽象类处理统一编码的字符流。java 中有多个具体的子类。

字符输入流的描述
这里写图片描述

描述
Read 表示字符输入流的抽象类
BufferedReader 带缓冲功能的字符输入流
CharArrayReader 把字符数组作为输入源的输入流
FilterReader 过滤字符输入流
InputStreamReader 字节流向字符流转化流
PipedReader 管道字符输入流
StringReader 把字符串作为数据源的输入流
LineNumberReader 能够统计行数的输入流
PushbackReader 能够向输入流退回一个字符的输入流
FileReader 文件字符输入流

字符输出流的描述
这里写图片描述

描述
Writer 描述字符输出流的抽象类
BufferedWriter 带缓冲功能的字符输出流
OutPutStreamWriter 字节输出流向字符输出流的转换
CharArrayWriter 把字符数组作为数据接收器
FilterWriter 过滤字符输出流
PipedWriter 管道字符输出流
PrintWriter 打印字符输出流,类似于PrintStream
StringWriter 把字符串作为数据接收器
FileWriter 文件字符输出流

抽象类 Reader 和 Writer 定义了几个实现其他流类的关键方法。其中两个最重要的是 read() 和 write() ,它们分别进行字符数据的读 和 写。这些方法被派生流类重写。

猜你喜欢

转载自blog.csdn.net/daicooper/article/details/80955583
今日推荐