mirror of
https://github.com/LingCoder/OnJava8.git
synced 2026-08-23 22:43:28 +08:00
✓ 附录:IO 流 - 前两小节
This commit is contained in:
@@ -30,7 +30,7 @@ I/O 流屏蔽了实际的 I/O 设备中处理数据的细节:
|
||||
<!-- Types of InputStream -->
|
||||
## 输入流类型
|
||||
|
||||
`InputStream` 表示那些从不同数据源产生输入的类,这些数据源包括:
|
||||
`InputStream` 表示那些从不同数据源产生输入的类,如[表 I/O-1](#table-io-1) 所示,这些数据源包括:
|
||||
|
||||
1. 字节数组;
|
||||
2. `String` 对象;
|
||||
@@ -41,7 +41,7 @@ I/O 流屏蔽了实际的 I/O 设备中处理数据的细节:
|
||||
|
||||
每种数据源都有相应的 `InputStream` 子类。另外,`FilterInputStream` 也属于一种 `InputStream`,它的作用是为“装饰器”类提供基类。其中,“装饰器”类可以把属性或有用的接口与输入流连接在一起,这个我们稍后在讨论。
|
||||
|
||||
<span id="table-io-1" align="center">**表 I/O-1:`InputStream` 类型**</span>
|
||||
<span id="table-io-1">**表 I/O-1:`InputStream` 类型**</span>
|
||||
|
||||
| 类 | 功能 | 构造器参数 | 如何使用 |
|
||||
| :--: | :-- | :-------- | :----- |
|
||||
@@ -55,7 +55,11 @@ I/O 流屏蔽了实际的 I/O 设备中处理数据的细节:
|
||||
<!-- Types of OutputStream -->
|
||||
## 输出流类型
|
||||
|
||||
<span id="table-io-2" align="center">**表 I/O-2:`OutputStream` 类型**</span>
|
||||
如[表 I/O-2](#table-io-2) 所示,该类别的类决定了输出所要去往的目标:字节数组(但不是 `String`,当然,你可以用字节数组自己创建)、文件或管道。
|
||||
|
||||
另外,`FilterOutputStream` 为“装饰器”类提供了一个基类,“装饰器”类把属性或者有用的接口与输出流连接了起来,这些稍后会讨论。
|
||||
|
||||
<span id="table-io-2">**表 I/O-2:`OutputStream` 类型**</span>
|
||||
|
||||
| 类 | 功能 | 构造器参数 | 如何使用 |
|
||||
| :--: | :-- | :-------- | :----- |
|
||||
@@ -71,26 +75,27 @@ I/O 流屏蔽了实际的 I/O 设备中处理数据的细节:
|
||||
|
||||
### 通过 `FilterInputStream` 从 `InputStream` 读取
|
||||
|
||||
<span id="table-io-3" align="center">**表 I/O-3:`FilterInputStream` 类型**</span>
|
||||
<span id="table-io-3">**表 I/O-3:`FilterInputStream` 类型**</span>
|
||||
|
||||
| 类 | 功能 | 构造器参数 | 如何使用 |
|
||||
| :--: | :-- | :-------- | :----- |
|
||||
| `DataInputStream` | | | |
|
||||
| `BufferedInputStream` | | | |
|
||||
| `LineNumberInputStream` | | | |
|
||||
| `PushbackInputStream` | | | |
|
||||
| `DataInputStream` | 与 `DataOutputStream` 搭配使用,按照移植方式从流读取基本数据类型(`int`、`char`、`long` 等) | `InputStream` | 包含用于读取基本类型数据的全部接口 |
|
||||
| `BufferedInputStream` | 使用它可以防止每次读取时都得进行实际写操作。代表“使用缓冲区” | `InputStream`,可以指定缓冲区大小(可选) | 本质上不提供接口,只是向进程添加缓冲功能。与接口对象搭配 |
|
||||
| `LineNumberInputStream` | 跟踪输入流中的行号,可调用 `getLineNumber()` 和 `setLineNumber(int)` | `InputStream` | 仅增加了行号,因此可能要与接口对象搭配使用 |
|
||||
| `PushbackInputStream` | 具有能弹出一个字节的缓冲区,因此可以将读到的最后一个字符回退 | `InputStream` | 通常作为编译器的扫描器,我们可能永远也不会用到 |
|
||||
|
||||
### 通过 `FilterOutputStream` 向 `OutputStream` 写入
|
||||
|
||||
<span id="table-io-4" align="center">**表 I/O-4:`FilterOutputStream` 类型**</span>
|
||||
<span id="table-io-4">**表 I/O-4:`FilterOutputStream` 类型**</span>
|
||||
|
||||
| 类 | 功能 | 构造器参数 | 如何使用 |
|
||||
| :--: | :-- | :-------- | :----- |
|
||||
| `DataOutputStream` | | | |
|
||||
| `PrintStream` | | | |
|
||||
| `BufferedOutputStream` | | | |
|
||||
| `DataOutputStream` | 与 `DataInputStream` 搭配使用,因此可以按照一直方式向流中写入基本类型数据(`int`、`char`、`long` 等) | `OutputStream` | |
|
||||
| `PrintStream` | 用于产生格式化输出。其中 `DataOutputStream` 处理数据的存储,`PrintOutputStream` 处理显示 | `OutputStream`,可以用 `boolean` 值指示是都每次换行时清空缓冲区(可选) | 应该是对 `OutputStream` 对象的 `final` 封装。可能会经常用到它 |
|
||||
| `BufferedOutputStream` | 使用它以避免每次发送数据时都进行实际的写操作。代表“使用缓冲区”。可以调用 `flush()` 清空缓冲区 | `OutputStream`,可以指定缓冲区大小(可选) | 本质上并不提供接口,只是向进程添加缓冲功能。与接口对象搭配 |
|
||||
|
||||
<!-- Readers & Writers -->
|
||||
|
||||
## Reader和Writer
|
||||
|
||||
|
||||
@@ -106,8 +111,10 @@ I/O 流屏蔽了实际的 I/O 设备中处理数据的细节:
|
||||
<!-- Summary -->
|
||||
## 本章小结
|
||||
|
||||
[^1]: 很难说这就是一个很好的设计选择,尤其是与其它编程语言中简单的 I/O 类库相比较。但它确实是如此选择的一个正当理由。
|
||||
|
||||
[^2]: XML 是另一种方式,可以解决在不同计算平台之间移动数据,而不依赖于所有平台上都有 Java 这一问题。XML 将在[附录:对象序列化](./Appendix-Object-Serialization.md)一章中进行介绍。
|
||||
|
||||
<!-- 分页 -->
|
||||
|
||||
<div style="page-break-after: always;"></div>
|
||||
[^表 IO-3]:
|
||||
Reference in New Issue
Block a user