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 中提供的 ...
随机推荐
- 关于Java单例
参考资料:http://blog.csdn.net/haoel/article/details/4028232 public class SingletonTest implements Runnab ...
- PHP高效率写法(详解原因)
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍.当然了,这个测试方法需要在十万级以上次执行,效果才明显.其实静态方法和非静态方法的效率 ...
- 繁华模拟赛 Vicent与游戏
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #i ...
- POJ 1836 Alignment
Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11450 Accepted: 3647 Descriptio ...
- HDOJ 2063 过山车
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- jvm内存模型和内存分配
1.什么是jvm? (1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的. (2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和 ...
- Centos6.5更新e1000网卡驱动
导读 在工作过程中经常遇到linux的操作系统网络不正常的情况,以前没有注意到,今天查看系统日志发现原来是网络驱动的问题.索性直接更新系统,更新网卡 问题:linux系统经常出现断网的情况,重启之后系 ...
- Coursera台大机器学习课程笔记14 -- Validation
这节课是接着上节的正则化课程的,目的也是为了防止overfitting. 第一小节讲了模型的选择,前面讲了很多模型,那么如何做出正确的选择呢?我们的目标是选择最小的Eout目标函数.首先应避免视觉化选 ...
- HDOJ 1869
#include<stdio.h> ][]; #define inf 0xffffff; void floyed(int n) { int i,j,k; ;k<n;k++) { ;i ...
- MYSQL随机抽取查询 MySQL Order By Rand()效率问题
MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机 ...