字符过滤输出流、与FilterOutputStream功能一样、只是简单重写了父类的方法、目的是为所有装饰类提供标准和基本的方法、要求子类必须实现核心方法、和拥有自己的特色。这里FilterWriter没有子类、可能其意义只是提供一个接口、留着以后的扩展。。。本身是一个抽象类、如同Writer一样、所以这里只是简单介绍一下字段方法、源码、没有示例。
protected Writer out; 传入的底层字符输出流
protected FilterWriter(Writer out) 使用传入的底层输出流构造FilterWriter
void close() 关闭此流 void flush() flush此流 writer(int c) 将一个字符写入到底层字符输出流out中 void write(char cbuf[], int off, int len) 将一个字符数组的一部分写入out中 void write(String str, int off, int len) 将一个字符串的一部分写入到out中
package com.chy.io.original.code; import java.io.IOException; /** * 本身是一个抽象类、只是对弗雷Writer中的方法进行了简单的重写、提供装饰类所具有的基本方法、 */ public abstract class FilterWriter extends Writer { /** 底层字符输出流*/ protected Writer out; /** 使用传入的底层字符输出流创建FilterWriter*/ protected FilterWriter(Writer out) { super(out); this.out = out; } /** 将一个字符写入到out中*/ public void write(int c) throws IOException { out.write(c); } /** 将一个字符数组的一部分写入到out中*/ public void write(char cbuf[], int off, int len) throws IOException { out.write(cbuf, off, len); } /** 将一个字符串的一部分写入到out中*/ public void write(String str, int off, int len) throws IOException { out.write(str, off, len); } /** flush此流*/ public void flush() throws IOException { out.flush(); } /** 关闭此流*/ public void close() throws IOException { out.close(); } }
字符过滤输入流、本事是一个抽象类、为所有装饰类提供一个标准、只是简单重写了父类Reader的所有方法、要求子类必须重写核心方法、和提供具有自己特色的方法、这里没有像字节流那样有很多的子类来实现不同的功能、可能是因为字符流本来就是字节流的一种装饰、所以在这里没有必要再对其进行装饰、只是提供一个扩展的接口而已。。。同样也没有示例。
protected Reader in; 底层字符输入流
protected FilterReader(Reader in) 使用传入的底层字符输入流创建FilterReader
void close(); 关闭此流 boolean markSupport() 检测此流是否支持mark void mark() 标记此流 void reset() 重置最后一次mark的位置 int read() 读取一个字符 int read(char[] b, int off, int len) 将字符读取到字符数组b中 boolean ready(); 检测此流是否可以读取 long skip(long n) 跳过底层输入流中的n个字符
package com.chy.io.original.code; import java.io.IOException; /** * 本身是一个抽象类、只简单重写了父类Reader的一些方法、作用是为所有装饰类提供一个标准、 * 子类要重写父类的核心方法和扩展具有自己特色的方法、目前没有子类、作用是为以后的扩展提供一个接口 */ public abstract class FilterReader extends Reader { /**底层字符输入流*/ protected Reader in; /** 使用传入的底层字符输入流创建FilterReader*/ protected FilterReader(Reader in) { super(in); this.in = in; } /**读取一个字符*/ public int read() throws IOException { return in.read(); } /**将字符读取到字符数组cbuf中*/ public int read(char cbuf[], int off, int len) throws IOException { return in.read(cbuf, off, len); } /**跳过底层输入流中的n个字符*/ public long skip(long n) throws IOException { return in.skip(n); } /**检测此流是否可以读取 */ public boolean ready() throws IOException { return in.ready(); } /**检测此流是否支持mark*/ public boolean markSupported() { return in.markSupported(); } /**标记此流*/ public void mark(int readAheadLimit) throws IOException { in.mark(readAheadLimit); } /**重置最后一次mark的位置 */ public void reset() throws IOException { in.reset(); } /**关闭此流 */ public void close() throws IOException { in.close(); } }
在字节流中、我们知道有很多具有特殊功能的类都是FilterInputStream和FilterOutputStream这两个类中的子类、他们都具有各自的特色、比如DataInputStream、DataOutputStream、BufferedInputStream、BufferedOutputStream、PrintStream等、但是在字符流中他们的设计却不是作为Filterxxx的子类来实现、而是直接作为Writer、Reader的子类出现、至于为什么这样设计、不知道、、可能是对字符的操作比较简单、统一、没有像字节那样有许多地方要做特色处理、当然这样说并不是意味着字符流强大、相反还是字节流比较强大、字符流能完成的字节流都能完成、而反过来就不成立了。对于为什么不再深究、以后有用到的地方再来补充。