ProxyInputStream类的学习
这个类的设计意图不是特别明确,就是继承与JDK的FilterInputStream类的,但是在它的read(byte[] bytes)这个函数也是调用delegate的read(byte[])函数,父类的是直接调用的是read(byte[] bytes, int offset, int length)函数。
这个类我们就可以理解成是调用封装的delete的InputStream吧。
AutoCloseInputStream类的学习
这个类的设计意图我们一看类名就比较明白,主要是自动关闭底层的InputStream流,就是每次在调用了read方法后都会判断是否关闭底层的InputStream流,就是把底层的InputStream设置成ClosedInputStream,这样对它的read方法的调用就不会抛出NPE异常了。
public void close() throws IOException { in.close(); in = new ClosedInputStream(); }
这个类的使用场景应该是在读取完毕的时候自动关闭流和释放底层的资源。
ClosedInputStream类的学习
这个类其实我们只要看一下它的实现应该就全明白了,就是把read方法返回-1就可以了。
public int read() {
return -1; }
CloseShieldInputStream类的学习
这个类其实就是不然底层的InputStream被关闭,所以就重载了关闭方法。
下面再来看一下英文注释里面写的使用场景:
This class is typically used in cases where an input stream needs to be
passed to a component that wants to explicitly close the stream even if
more input would still be available to other components.
CountingInputStream类的学习
这个类其实从类名称上面也能看出来它的使用意图,就是来统计读取的字节数的。
这个我就不多讲了,因为read方法就可以返回实际读到的字节数,然后在该类里面保存一个
统计变量的话,就可以来统计读取的字节数。
DemuxInputStream类的学习
这个类比较好理解,就是从当前ThreadLocal里面取得底层的InputStream进行读操作。这个类的使用场景也比较明确了,就是在某个实际给ThreadLocal里面放上合适的InputStream流,然后在调用这个类的read方法的时候,该类是从ThreadLocal里面取得相应的InputStream进行操作。
SwappedDataInputStream类的学习
这个类实际上涉及到数据的转换功能,具体的看一下下面的注释吧。
DataInput for systems relying on little endian data formats.
When read, values will be changed from little endian to big
endian formats for internal usage.
TeeInputStream类的学习
这个类太有意思了,实际上它完成的工作就是把读到的东西然后再写到底层包装的OutputStream里面去,感觉就像喝茶是的,抿一口茶,然后咽一口茶。其实这个类都没有特殊的,就是读后然后直接调用底层的OutputStream写数据,然后肯定我们还得有一个参数在指示到底要不要关闭OutputStream。
ClassLoaderObjectInputStream类的学习
这个类是继承ObjectInputStream的,在resolveClass函数里面会根据ObjectStreamClass类获得动态的进行加载class,所以在这个类的实现里面,在构造函数里面可以指定加载这个类所要使用的classloader。