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 等
- 缓冲流:增加缓冲功能,避免频繁读写硬盘。