I/O流:
    一个I/O流表示输入输出源或者目的地。
    字节流:
    程序用字节流来实现8位字节的输入和输出。所有字节流都是从InPutStream和OutPutStream继承类的。
    字符流:
    Java平台用unicode(统一代码字符编码标准)惯例存储字符值。
    字符流I/O可以在这种内部格式和本地字符集之间自动地相互转换。
    缓冲流:
    我们看到的大部分例子都用了无缓冲I/O。这就意味着每个读取或者存入请求都是底层操作系统直接处理的。由于每个这样的请求尝尝意味着会触发磁盘存取、网络活动或其他相对昂贵的操作,所以导致程序的效率很低。
    为了减少这类开销,Java平台实现了缓冲I/O流。缓冲输入流从内存缓冲区读取数据,只有当缓冲区空时,才调用本地输入API。类似的,被缓冲的输入流把数据写入缓冲区,只有当缓冲区满时,才调用本地输入API。
    程序可以用封装的做法把未缓冲的流转换为缓冲流,就是把未缓冲流对象传给缓冲类的构造函数。
    封装未缓冲流可以用四个缓冲