您的位置:首页 > 移动开发 > Android开发

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.

WorkerAWorkerBWorker
PlumberAPlumberBPlumber
CarpenterACarpenterBCarpenter
实现这种含有多维交叉属性的类,可以用装饰者模式

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 等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  io Java Android