這個(gè)類提供了一個(gè)緩存機(jī)制,等到緩存的容量達(dá)到一定的字節(jié)數(shù)時(shí)才寫(xiě)入輸出流。首先它繼承了FilterOutputStream,并且覆蓋了父類的write(int b)方法,在調(diào)用輸出流寫(xiě)出數(shù)據(jù)前都會(huì)檢查緩存是否已滿,如果未滿,則不寫(xiě)。這樣就實(shí)現(xiàn)了對(duì)輸出流對(duì)象動(dòng)態(tài)的添加新功能的目的。
下面,將使用Decorator模式,為IO寫(xiě)一個(gè)新的輸出流。
自己寫(xiě)一個(gè)新的輸出流
了解了OutputStream及其子類的結(jié)構(gòu)原理后,我們可以寫(xiě)一個(gè)新的輸出流,來(lái)添加新的功能。這部分中將給出一個(gè)新的輸出流的例子,它將過(guò)濾待輸出語(yǔ)句中的空格符號(hào)。比如需要輸出"java io OutputStream",則過(guò)濾后的輸出為"javaioOutputStream"。以下為SkipSpaceOutputStream類的代碼:
以下是代碼片段:
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* A new output stream, which will check the space character
* and won’t write it to the output stream.
* @author Magic
*
*/
public class SkipSpaceOutputStream extends FilterOutputStream {
public SkipSpaceOutputStream(OutputStream out) {
super(out);
}
/**
* Rewrite the method in the parent class, and
* skip the space character.
*/
public void write(int b) throws IOException{
if(b!=’ ’){
super.write(b);
}
}
}
它從FilterOutputStream繼承,并且重寫(xiě)了它的write(int b)方法。在write(int b)方法中首先對(duì)輸入字符進(jìn)行了檢查,如果不是空格,則輸出。
以下是一個(gè)測(cè)試程序:
以下是代碼片段:
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Test the SkipSpaceOutputStream.
* @author Magic
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |