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编译器需要它。一般不在自己的代码中使用.