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

理解数据流

数据流(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() ,它们分别进行字符数据的读 和 写。这些方法被派生流类重写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值