返回介绍

10.7.2 修改数据流的行为

发布于 2024-10-15 23:56:24 字数 2974 浏览 0 评论 0 收藏 0

在 Java 1.0 中,数据流通过 FilterInputStream 和 FilterOutputStream 的“装饰器”(Decorator)子类适应特定的需求。Java 1.1 的 IO 流沿用了这一思想,但没有继续采用所有装饰器都从相同“filter”(过滤器)基础类中衍生这一做法。若通过观察类的层次结构来理解它,这可能令人出现少许的困惑。

在下面这张表格中,对应关系比上一张表要粗糙一些。之所以会出现这个差别,是由类的组织造成的:尽管 BufferedOutputStream 是 FilterOutputStream 的一个子类,但是 BufferedWriter 并不是 FilterWriter 的子类(对后者来说,尽管它是一个抽象类,但没有自己的子类或者近似子类的东西,也没有一个“占位符”可用,所以不必费心地寻找)。然而,两个类的接口是非常相似的,而且不管在什么情况下,显然应该尽可能地使用新版本,而不应考虑旧版本(也就是说,除非在一些类中必须生成一个 Stream,不可生成 Reader 或者 Writer)。

Filters:
Java 1.0 class

Corresponding Java 1.1 class

FilterInputStream

FilterReader

FilterOutputStream

FilterWriter ( abstract class with no subclasses)

BufferedInputStream

BufferedReader
(also has readLine( ) )

BufferedOutputStream

BufferedWriter

DataInputStream

use DataInputStream
(Except when you need to use readLine( ) , when you should use a BufferedReader )

PrintStream

PrintWriter

LineNumberInputStream

LineNumberReader

StreamTokenizer

StreamTokenizer
(use constructor that takes a Reader instead)

PushBackInputStream

PushBackReader

过滤器:Java 1.0 类 对应的 Java 1.1 类

FilterInputStream FilterReader

FilterOutputStream FilterWriter(没有子类的抽象类)

BufferedInputStream BufferedReader(也有 readLine())

BufferedOutputStream BufferedWriter

DataInputStream 使用 DataInputStream(除非要使用 readLine(),那时需要使用一个 BufferedReader)

PrintStream PrintWriter

LineNumberInputStream LineNumberReader

StreamTokenizer StreamTokenizer(用构建器取代 Reader)

PushBackInputStream PushBackReader

有一条规律是显然的:若想使用 readLine(),就不要再用一个 DataInputStream 来实现(否则会在编译期得到一条出错消息),而应使用一个 BufferedReader。但除这种情况以外,DataInputStream 仍是 Java 1.1 IO 库的“首选”成员。

为了将向 PrintWriter 的过渡变得更加自然,它提供了能采用任何 OutputStream 对象的构建器。PrintWriter 提供的格式化支持没有 PrintStream 那么多;但接口几乎是相同的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文