I/O流 && 装饰者模式
2016-06-08 17:46
399 查看
Input/Output
输入来源:文件、键盘、触摸屏、网络。。。输出目的:文件、屏幕、打印机、网络。。。
分类
输入流/输出流
字节流/字符流
节点流/处理流
字节流
核心类
InputStream(abstract)<–FileInputStream
OutputStream(abstract)<–FileOutputStream
核心方法:
InputStream:
int read(byte [] b, int off, int len),返回值是读取数据的数量
OutputStream:
void write(byte [] b, int off, int len)
//off = offside 读写偏移量
//len = length 读写长度
字符流
核心类
Reader(abstract) <– FileReader
Writer(abstract) <– FileWriter
核心方法
Reader:
int read(char [] c, int off, int len)
Writer:
void write(char [] c, int off, int len)
装饰者模式
e.g.
Worker | AWorker | BWorker |
---|---|---|
Plumber | APlumber | BPlumber |
Carpenter | ACarpenter | BCarpenter |
class AWorker implements Worker { private Worker worker; public AWorker(Worker worker) { this.worker = worker; } public void doSomeWork() { //AWorker特有功能的操作逻辑 worker.doSomeWork(); } } class Test { public static void main(String [] args) { Plumber plumber = new Plumber(); AWorker aWorker = new AWorker(plumber); aWorker.doSomeWork(); } }
即实现了A公司的水管工的实现过程。
6.节点流/处理流
- 节点流:可以从或向一个特定的地方(节点)读写数据(如FileReader);
- 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写(如BufferedReader)。
处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
从装饰者模式的角度来看,
节点流就是被装饰者,如FileReader;
处理流就是装饰者,如BufferedReader。
装饰者是给被装饰者添加新的功能
即处理流就是给节点流增加新的功能
像BufferedReader其中就有个readLine()方法给了FileReader一行一行读取的功能,并把读取到的信息通过String类型返回回来,即public String readLine()
e.g.:
class Test { public static void main(String [] args) { FileReader fr = null; BufferedReader br = null; try{ fr = new FileReader("e:/src/from.txt"); br = new BufferedReader(fr); String line = null; while(true) { line = br.readLine(); if ( line == null) { break; } System.out.println(line); } } catch(IOException e){ e.printStackTrace(); } finally{ try{ br.close(); //只需要关闭处理流BufferedReader而不用关闭节点流FileReader,因为关闭处理流时会自动关闭里面的节点流 } catch(IOException e){ e.printStackTrace(); } } } }
常用节点流:
文 件:FileInputStream、FileOutputStream、FileReader、FileWriter
字符串:StringReader、StringWriter
数 组:ByteArrayInputStream、ByteArrayOutputStream、CharArrayReader、CharArrayWriter
管 道:PipedInputStream、PipedOutputStream、PipedReaderPipedWriter
父 类:InputStream、OutputStream、Reader、Writer
常用处理流:
缓冲流:增加缓冲功能,避免频繁读写硬盘。
BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
转换流:实现字节流和字符流之间的转换。
InputStreamReader、OutputStreamWriter
数据流:提供将基础数据类型写入到文件中,或者读取出来。
DataInputStream、DataOutputStream 等
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法