# 类结构
# 源码解析
我们已经分析了 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 { | |
} | |
} |