# 类结构

UML

# 源码解析

我们已经分析了 InputStream ,这两个很相似,一个 read 对应一个 write ,也是使用了装饰者模式,这里直接给出源码

public abstract class OutputStream implements Closeable, Flushable {
 
    // 将指定的字节写入输出流
    public abstract void write(int b) throws IOException;
 
    // 将指定的 byte 数组的字节全部写入输出流
    public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }
 
    // 将指定的 byte 数组中从偏移量 off 开始的 len 个字节写入输出流
    public void write(byte b[], int off, int len) throws IOException {
        if (b == null) {
            throw new NullPointerException();
        } else if ((off < 0) || (off > b.length) || (len < 0) ||
                   ((off + len) > b.length) || ((off + len) < 0)) {
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return;
        }
        for (int i = 0 ; i < len ; i++) {
            write(b[off + i]);
        }
    }
    // 刷新输出流,并强制写出所有缓冲的输出字节
    public void flush() throws IOException {
    }
    // 关闭输出流,并释放与该流有关的所有资源
    public void close() throws IOException {
    }
 
}