- 写在前面的话
- 引言
- 第 1 章 对象入门
- 第 2 章 一切都是对象
- 第 3 章 控制程序流程
- 第 4 章 初始化和清除
- 第 5 章 隐藏实施过程
- 第 6 章 类再生
- 第 7 章 多形性
- 第 8 章 对象的容纳
- 第 9 章 违例差错控制
- 第 10 章 Java IO 系统
- 第 11 章 运行期类型鉴定
- 第 12 章 传递和返回对象
- 第 十三 章 创建窗口和程序片
- 第 14 章 多线程
- 第 15 章 网络编程
- 第 16 章 设计范式
- 第 17 章 项目
- 附录 A 使用非 JAVA 代码
- 附录 B 对比 C++和 Java
- 附录 C Java 编程规则
- 附录 D 性能
- 附录 E 关于垃圾收集的一些话
- 附录 F 推荐读物
10.2.1 通过 FilterInputStream 从 InputStream 里读入数据
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论