添加属性和有用的接口
FilterInputStream和FilterOutputStream是用来提供装饰器类接口以控制特定输入流(InputStream)和输出流(OutputStream)的两个类,他们的名字不是很直观,FilterInputStream和FilterOutputStream分别来自I/O类库中的基类InputStream和OutputStream,这两个类是装饰器的必要条件。
一、通过FilterInputStream从InputStream读取数据
FilterInputStream类能够完成两件完全不同的事情。
- DataInputStream允许我们读取不同的基本类型数据以及String对象,搭配相应的DataOutputStream,我们就可以通过数据流将基本类型的数据从一个地方迁移到另一个地方。
- 其他FilterInputStream类则在内部修改InputStream的行为方式:是否缓冲,是否保留它所读过的行,以及是否把单一字符推回输入流等等。
类 | 功能 | 构造器参数|如何使用 |
DataInputStream | 与DataOutputStream搭配使用,因此,我们可以按照可移植方式从流读取基本数据类型 | InputStream 包含用于读取基本类型数据的全部接口 |
BufferedInputStream | 使用它可以防止每次读取数据时都得进行实际写操作。代表“使用缓冲区” | InputStream 可以指定缓冲区大小,本质上不提供接口,只不过是向进程中添加缓冲区所必需的。与接口对象搭配 |
LineNumberInputStream | 跟踪输入流中的行号;可调用getLineNumber()和setLineNumber(int) | InputStream 仅增加了行号,因此可能要与接口对象搭配使用 |
PushbackInputStream | 具有“能弹出一个字节的缓冲区”。因此可以将读到最后的一个字符回退。 | InputStream 通常作为编辑器的扫描器,之所以包含在内是因为java编译器的需要,我们可能永远不会用到。 |
二、通过FilterOutputStream向OutputStream写入
与DataInputStream对应的是DataOutputStream,它可以将各种基本数据类型以及String对象格式化输出到流中,这样一来,任何机器上的任何DataInputStream都能够读取他们,所有的方法都以write开头。
类 | 功能 | 构造器参数|如何使用 |
DataOutputStream | 与DataInputStream搭配使用,因此可以按照可移植方式向流中写入基本类型数据 | OutputStream 包含用于写入基本类型数据的全部接口 |
PrintStream | 用于产生格式化输出,其中DataOutputStream处理数据的存储,PrintStream处理显示。 | OutputStream,可以用boolean值指示是否在每次换行是清空缓冲区,应该是对OutputStream对象的final封装。 可能会经常使用到他。 |
BufferedOutputStream | 使用他以避免每次发送数据时都要进行实际的写操作。代表“使用缓冲区”。可以调用flush()清空缓冲区。 | OutputStream,可以指定缓冲区大小。 本质上并不提供接口,只不过是向进程中添加缓冲区所必需的。 与接口对象搭配。 |