Java Hour 22 I/O
有句名言,叫做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
Java Hour 22 I/O的更多相关文章
- JAVA进阶22
1.接口默认方法的使用 ①接口的默认方法可以通过接口实现类对象直接调用. ②接口的默认方法也可以被接口实现类进行覆盖重写 package cn.intcast.demo17; public inter ...
- Java 第22章 mySQy
下列都是关系型数据库(在数据库中存在行.列) oracle: Oracle公司的产品(被sun公司收购) 中大型项目使用.银行系统.政府办公系统 9i/10g/11g sql server: 微软公司 ...
- 最佳新秀Java(22)——再次了解泛型
仿制药Java SE 1.5新功能.通用自然是参数化类型.即操作数据类型被指定为一个参数.这样的参数类型可以在课堂上使用.创建的接口和方法,他们被称为通用类..泛型方法. Java语言引入泛型的优点是 ...
- java 多线程 22 :生产者/消费者模式 进阶 利用await()/signal()实现
java多线程15 :wait()和notify() 的生产者/消费者模式 在这一章已经实现了 wait/notify 生产消费模型 利用await()/signal()实现生产者和消费者模型 一样 ...
- java基础22 日期类、日历类、日期格式类
package com.dhb.code; import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...
- java之 22天 GUI 图形界面编程(二)
转自:http://takeme.iteye.com/blog/1876853 模拟window开打文件 import java.awt.Button; import java.awt.Dialog; ...
- java之 22天 GUI 图形界面编程(一)
转自:http://takeme.iteye.com/blog/1876850 GUI(图形用户界面) import java.awt.Button; import java.awt.FlowLayo ...
- java基础(22):File、递归
1. File 1.1 IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序 ...
- Java(22)常用API一
1 API 1.1 API概述 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供的 ...
随机推荐
- 三角形变形记之纯css实现的分布导航条效果
三角形变形记,用纯css实现的分布导航条效果 <style type="text/css"> ul,li { list-style-type:none; font-si ...
- hibernate criteria中Restrictions的用法
方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...
- 怎样把excel一列分成多列
1,选定要分列的列. 2,点击“数据”-“分列”. 3,在选项栏中设置如图 4,选择分隔符 4,看,分开了吧!
- 高效使用git的一些命令
1,添加文件到版本库 添加单个文件: git add filename 添加所有txt文件: git add *.txt 添加所有修改文件: git add ...
- cocos基础教程(5)数据结构介绍之cocos2d::Value
1.概述 cocos2d::Valie 是一个包含了很多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外加 std::vec ...
- Java中的final修饰符
1.什么时候可以选择final修饰符 如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰. 2.用final修饰的类 首先大家要明白,用final修饰的类是不能被继承的, ...
- PV公式
IP(独立IP): 即Internet Protocol,指独立IP数.00:00-24:00内相同IP地址之被计算一次.PV(访问量): 即Page View, 即页面浏览量或点击量,用户每次刷 ...
- Unity3D 4.x 使用Mecanim实现连击
http://blog.csdn.net/onerain88/article/details/12854817 Unity3D 4.x 版本之后提供了一种新的动画机制Mecanim,虽然目前还支持之前 ...
- hdu1151 二分图(无回路有向图)的最小路径覆盖 Air Raid
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- C/C++语法知识:typedef struct 用法详解
第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定 ...