2010-07-30 20 views
1

進出口使用具有下列方法的第三方類:如何提取發送到PrintStream的內容?

public void print(PrintStream s); 

但是我想做的是acually記錄輸出。有點像:

RecordingPrintStream p = new RecordingPrintStream 
instance.print(p); 
logger.log(p.getContents()); 

那麼我可以用什麼作爲我的RecordingPrintStream?

+0

你是問對現有的類,或者你想知道如何實現RecordingPrintStream?前者是 – 2010-07-30 08:18:24

+0

。作爲最後的手段,我可​​以繼承PrintStream並覆蓋所有輸出方法,但我寧願不,顯然。 – PaulJWilliams 2010-07-30 08:24:43

回答

5

喜歡的東西:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
PrintStream recordingStream = new PrintStream(baos); 
instance.print(recordingStream); 
logger.log(baos.toString()); 
-1

您可以使用下面的構造器創建的PrintStream: 的PrintStream(OutputStream中出)

你可以用你的日誌方法使用任何StringOutputStream的同時創建PrintStream對象,並獲得內容從StringBuffer來輸出。

class StringOutputStream extends OutputStream { 

    StringBuilder mBuf; 

    public void write(int byte) throws IOException { 
    mBuf.append((char) byte); 
    } 

    public String getString() { 
    return mBuf.toString(); 
    } 
} 

所以,如果你想輸出到文件使用對象FileOutputStream中的邊建設邊PrintStream對象。

+0

但是,這將繞過日誌記錄機制,直接轉到日誌文件。 – PaulJWilliams 2010-07-30 08:23:55

+0

你不能做'mBuf.append((char)byte)'並且期待toString()的任何有意義的輸出。字符在java中不是字節。 – unbeli 2010-07-30 08:32:42