返回介绍

10.2.1 通过 FilterInputStream 从 InputStream 里读入数据

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

FilterInputStream 类要完成两件全然不同的事情。其中,DataInputStream 允许我们读取不同的基本类型数据以及 String 对象(所有方法都以“read”开头,比如 readByte(),readFloat() 等等)。伴随对应的 DataOutputStream,我们可通过数据“流”将基本类型的数据从一个地方搬到另一个地方。这些“地方”是由表 10.1 总结的那些类决定的。若读取块内的数据,并自己进行解析,就不需要用到 DataInputStream。但在其他许多情况下,我们一般都想用它对自己读入的数据进行自动格式化。

剩下的类用于修改 InputStream 的内部行为方式:是否进行缓冲,是否跟踪自己读入的数据行,以及是否能够推回一个字符等等。后两种类看起来特别象提供对构建一个编译器的支持(换言之,添加它们为了支持 Java 编译器的构建),所以在常规编程中一般都用不着它们。

也许几乎每次都要缓冲自己的输入,无论连接的是哪个 IO 设备。所以 IO 库最明智的做法就是将未缓冲输入作为一种特殊情况处理,同时将缓冲输入接纳为标准做法。

表 10.3 FilterInputStream 的类型

Class

Function

Constructor Arguments

How to use it

Data-InputStream

Used in concert with DataOutputStream , so you can read primitives (int, char, long, etc.) from a stream in a portable fashion.

InputStream

Contains a full interface to allow you to read primitive types.

Buffered-InputStream

Use this to prevent a physical read every time you want more data. You’re saying “Use a buffer.”

InputStream , with optional buffer size.

This doesn’t provide an interface per se, just a requirement that a buffer be used. Attach an interface object.

LineNumber-InputStream

Keeps track of line numbers in the input stream; you can call getLineNumber( ) and setLineNumber(int) .

InputStream

This just adds line numbering, so you’ll probably attach an interface object.

Pushback-InputStream

Has a one byte push-back buffer so that you can push back the last character read.

InputStream

Generally used in the scanner for a compiler and probably included because the Java compiler needed it. You probably won’t use this.

类 功能 构建器参数/如何使用

DataInputStream 与 DataOutputStream 联合使用,使自己能以机动方式读取一个流中的基本数据类型(int,char,long 等等) InputStream/包含了一个完整的接口,以便读取基本数据类型

BufferedInputStream 避免每次想要更多数据时都进行物理性的读取,告诉它“请先在缓冲区里找” InputStream,没有可选的缓冲区大小/本身并不能提供一个接口,只是发出使用缓冲区的要求。要求同一个接口对象连接到一起

LineNumberInputStream 跟踪输入流中的行号;可调用 getLineNumber() 以及 setLineNumber(int) 只是添加对数据行编号的能力,所以可能需要同一个真正的接口对象连接

PushbackInputStream 有一个字节的后推缓冲区,以便后推读入的上一个字符 InputStream/通常由编译器在扫描器中使用,因为 Java 编译器需要它。一般不在自己的代码中使用

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

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

发布评论

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