
有句名言,叫做10000小时成为某一个领域的专家。姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧。
I/O
InputStream, OutStream, Reader, Writer
前面两个是面向字节的,后面两个是面向Unicode的,日常一般都用后者。
Stream 有很强大的继承体系,这里就不截图了。
Reader 稍微常用,继承关系也很强大。
当然,以上两类都实现了 Closeable 的接口。
public abstract class InputStream implements Closeable {
public abstract class OutputStream implements Closeable, Flushable
public abstract class Reader implements Readable, Closeable
public abstract class Writer implements Appendable, Closeable, Flushable
顺便,这里应该有一个装饰者模式的运用。
让我们回顾下装饰者模式的作用:
以透明的方式扩展对象的功能,是继承的另一种解决方案。
缺点是会产生小对象,过度使用会让程序变复杂。
个人觉得理解装饰者模式,必须要试图找出这几个类。
第一个是最root 的基类。
第二个是ComcreteComponent. 体现在IO 中就是 FileInputStream
第三个是装饰者的基类。 这里就是FilterInputStream
public class BufferedInputStream extends FilterInputStream
最后才是具体的成品类。 这里是BufferedInputStream。
最终调用的是成品,而不是基类,这点也要注意。说白了因为最终调用的是成品,而成品里面包含了一个ConcreteComponet 的引用,所以间接拥有了它的功能。
其实最关键的就是
public class FilterInputStream extends InputStream
volatile
volatile 关键字的作用
这个应该和多线程,JVM 之类的有关系,留待多线程的那天再看。
protected volatile InputStream in;
折叠代码快捷键
Ctrl + Shift + 小键盘 /
关于装饰者模式,可以参考
http://www.cnblogs.com/justinw/archive/2007/06/11/779356.html