上一篇《java io 之 inputstream源码》,说了inputstream。jdk1.0中就有了这传统的io字节流,也就是 inputstream 和 outputstream。梳理下两者的核心:
也是一个抽象类,即表示所有字节输入流实现类的基类。它的作用就是抽象地表示所有要输出到的目标,例如常见的fileoutstream、filteroutputstream等。它实现了java.io.closeable和java.io.flushable两个接口。其中空实现了flush方法,即拥有刷新缓存区字节数组作用。
那些输出目标呢?比如:
filteroutputstream是为各种outputstream实现类提供的“装饰器模式”的基类。将属性或者有用的接口与输出流连接起来。
一样的,先看源码:
其中三个核心的write()方法,对应着三个inputstream的read()方法:
1 . abstract void write(int b) 抽象方法
对应着,inputstream的read()方法,此方法依旧是抽象方法。因为子类必须实现此方法的一个实现。这就是输入流的关键方法。
二者,下面两个write方法中调用了此核心方法。
2 . void write(byte b[]) 方法
将指定的byte数组的字节全部写入输出流。该效果实际上是由下一个write方法实现的,只是调用的额时候指定了长度:
3 . void write(byte b[], int off, int len) 方法
将指定的byte数组中从偏移量off开始的len个字节写入输出流。代码详细流程解读如下:
重要的事情说三遍: