當你有一組應用程序接口(API)只允許用Writer或Reader作為輸入,但你又想使用String,這時可以用StringWriter或StringReader。
假設有下面這樣一個process方法,給這個方法傳遞一個Person對象並把處理結果寫入到一個Writer對象:
public void process_ (Person person, Writer writer);
這是設計API的一種很好的方式,因為API不必關心對象構造的問題,並且它很簡單且一般化。
Writer類輸出數據到一個文件;不過有時候數據必須保留在內存中,比如想在數據被輸出以前在圖形用戶界面(GUI)上先顯示一下,這時可以用StringWriter。StringWriter不是把數據寫到某種形式的輸出設備上,相反,它寫到內存中。它有一個空的構造器和一個toString方法以得到StringBuffer。例如:
Writer writer = ...;
StringWriter out = new StringWriter(writer);
process(person, out);
StringBuffer result = out.getBuffer( );
當讀入文件時也一樣。可以用StringReader代替Reader來哄騙API,而不必非得從某種形式的文件中讀入。StringReader的構造器要求一個String參數。例如:
Reader in = new StringReader("<conf><panic level="5"/></conf>");
alarm.loadConfig(in);
Writer和Reader類是設計來處理基於字符串的輸入和輸出的。InputStream和OutputStream類則應該用於處理基於字節的I/O。在這個層次的類中,可以用ByteArrayInputStream和ByteArrayOutputStream來達到StringReader和StringWriter的類似效果。