IO类的功能描述

Stream最基本的分为:
1. source stream 其实就是 input stream
2. sink stream 其实就是 output stream
因此,stream 就是一个由 source 到 sink 的数据流
Sources 和 Sinks 都属于 Node Streams
 
 
一、基础 Stream 的类包括两大类:
+-----------------+---------------+-------------------+
|                 | byte streams  | character streams |
|-----------------+---------------+-------------------|
| source streams  | InputStream   |      Reader       |
|-----------------+---------------+-------------------|
| sink streams    | OutputStream  |      Writer       |
+-----------------+---------------+-------------------+
byte streams类支持操作的数据为raw bytes
character streams类支持操作的数据为Unicode characters
因此涉及到中文或其他 Unicode 字符操作时都要使用character streams
 
习惯上将 stream 特指 byte streams,将reader/writer特指character streams
(当看到类名中包含InputStream/OutputStream就是操作byte stream的,
包含Reader/Writer就是操作character stream的)
 
 
二、Node Streams节点流类包括三种基本类:
files, memory, pipes
+-------------+--------------------+-----------------------+
|     Type    | Character Streams  | Byte Streams          |
|-------------+--------------------+-----------------------|
|     File    | FileReader         | FileInputStream       |
|             | FileWriter         | FileOutputStream      |
|-------------+--------------------+-----------------------|
|Memory:Array | CharArrayReader    | ByteArrayInputStream  |
|             | CharArrayWriter    | ByteArrayOutputStream |
|-------------+--------------------+-----------------------|
|Memory:String| StringReader       |                       |
|             | StringWriter       |                       |
|-------------+--------------------+-----------------------|
|     Pipe    | PipedReader        | PipedInputStream      |
|             | PipedWriter        | PipedOutputStream     |
+-------------+--------------------+-----------------------+
 
三、I/O Stream Chaining IO链流:
1. Input Stream Chain
                                          +----------------+
                   +----------------------|                |
+------------------|                      |                |
|FileInputStream-->|BufferedInputStream-->|DataInputStream |
+------------------|                      |                |
       A           +----------------------|                |
       |                                  +----------------+
       |                                           |
       |                                           V
  +----------+                                 +-------+
  |DataSource|                                 |Program|
  +----------+                                 +-------+
 
2. Output Stream Chain
+-------------------+
|                   |-----------------------+
|                   |                       |----------------+
|DataOutputStream-->|BufferedOutputStream-->|FileOutputStream|
|                   |                       |----------------+
|                   |-----------------------+        |
+-------------------+                                |
         A                                           |
         |                                           V
     +-------+                                   +--------+
     |Program|                                   |DataSink|
     +-------+                                   +--------+
 
 
四、Processing Streams 进程流:
Processing Streams 也叫 filter streams 筛选流(过滤流)
Processing Streams 可以提供Byte Streams 和 Character Streams互相转换
+--------------------+--------------------+-----------------------+
| Type               | Character Streams  | Byte Streams          |
|--------------------+--------------------+-----------------------|
| Buffering          | BufferedReader     | BufferedInputStream   |
|                    | BufferedWriter     | BufferedOutputStream  |
|--------------------+--------------------+-----------------------|
| Filtering          | FilterReader       | FilterInputStream     |
| (abstract class)   | FilterWriter       | FilterOutputStream    |
|--------------------+--------------------+-----------------------|
| Converting between | InputStreamReader  |                       |
| bytes and character| OuptutStreamWriter |                       |
|--------------------+--------------------+-----------------------|
| Object             |                    | ObjectInputStream     |
| serialization      |                    | ObjectOutputStream    |
|--------------------+--------------------+-----------------------|
| Data conversion    |                    | DataInputStream       |
|                    |                    | DataOutputStream      |
|--------------------+--------------------+-----------------------|
| Counting           | LineNumberReader   | LineNumberInputStream |
|--------------------+--------------------+-----------------------|
| Peeking ahead      | PushbackReader     | PushbackInputStream   |
|--------------------+--------------------+-----------------------|
| Printing           | PrintWriter        | PrintStream           |
+--------------------+--------------------+-----------------------+
 
 
五、IO 类层次结构
1. 基本的 Byte Stream 类层次结构:
 
1) InputStream类层次结构:
 
                 +--- FileInputStream
                 |
                 +--- ObjectInputStream      +--- DataInputStream
                 |                           |
+-----------+    |    +-----------------+    +--- PushbackInputStream
|InputStream| <--+--- |FilterInputStream| <--|
+-----------+    |    +-----------------+    +--- BufferedInputStream
                 |                           |
                 +--- PipedInputStream       +--- LineNumberInputStream
                 |
                 +--- SequenceInputStream
                 |
                 +--- StringBufferInputStream
                 |
                 +--- ByteArrayInputStream
 
2) OutputStream类层次结构:
 
                  +--- FileOutputStream
                  |
                  +--- ObjectOutputStream
                  |                            +--- DataOutputStream
+------------+    |    +------------------+    |
|OutputStream| <--+--- |FilterOutputStream| <------ BufferedOutputStream
+------------+    |    +------------------+    |
                  |                            +--- PrintStream
                  +--- PipedOutputStream
                  |
                  +--- ByteArrayOutputStream
 
2. 基本的 Character Stream 类层次结构:
 
1) Reader类层次结构:
 
            +--- BufferedReader <---- LineNumberReader
            |
            +--- CharArrayReader
            |
+------+    +--- StringReader
|Reader| <--|
+------+    +--- InputStreamReader <--- FileReader
            |
            +--- PipedReader
            |
            +--- FilterReader <--- PushbackReader
 
2) Writer类层次结构:
 
            +--- BufferedWriter <--- LineNumberReader
            |
            +--- CharArrayWriter
            |
            +--- StringWriter
+------+    |
|Writer| <--+--- OutputStreamWriter <--- FileWriter
+------+    |
            +--- PrintWriter
            |
            +--- PipedWriter
            |
            +--- FilterWriter
 
 
小结:
SL-275推荐在程序中尽量使用最底层的子类以提高效率
(不过我觉得从各种source输入的流应该需要IO链流一步一步转化为
最底层的高效率的IO子类,下面的例子就是如此)
 
 
六、一个字符在对象之间流动的过程示意:
 
1. 对应的程序:
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
String name = input.readLine();
System.out.println(name);
 
2. 流程示意图:
设备(键盘)
    |     System.in
    +---> |65|108|32|71|111|114|101|13|-----+
          InputStream 对象                  |
                                            |
          reader                            |
    +---- |65|108|32|71|111|114|101|13| <---+
    |     InputStreamReader对象
    |
    |     input
    +---> |A|l| |G|o|r|e|/n| ---+
          BufferedReader对象    |
                                |
           name                 |
    +---- "Al Gore" <-----------+
    |     String对象
    |
    |      System.out
    +---> |H|e|l|l|o|,|A|l| |G|o|r|e|!| | ---+
          PrintStream对象                    |
                                             |
                       +---------------------+
                       |
                       V
           显示器输出:Hello,Al Gore!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值