進出口使用具有下列方法的第三方類:如何提取發送到PrintStream的內容?
public void print(PrintStream s);
但是我想做的是acually記錄輸出。有點像:
RecordingPrintStream p = new RecordingPrintStream
instance.print(p);
logger.log(p.getContents());
那麼我可以用什麼作爲我的RecordingPrintStream?
進出口使用具有下列方法的第三方類:如何提取發送到PrintStream的內容?
public void print(PrintStream s);
但是我想做的是acually記錄輸出。有點像:
RecordingPrintStream p = new RecordingPrintStream
instance.print(p);
logger.log(p.getContents());
那麼我可以用什麼作爲我的RecordingPrintStream?
喜歡的東西:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream recordingStream = new PrintStream(baos);
instance.print(recordingStream);
logger.log(baos.toString());
您可以使用下面的構造器創建的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對象。
但是,這將繞過日誌記錄機制,直接轉到日誌文件。 – PaulJWilliams 2010-07-30 08:23:55
你不能做'mBuf.append((char)byte)'並且期待toString()的任何有意義的輸出。字符在java中不是字節。 – unbeli 2010-07-30 08:32:42
你是問對現有的類,或者你想知道如何實現RecordingPrintStream?前者是 – 2010-07-30 08:18:24
。作爲最後的手段,我可以繼承PrintStream並覆蓋所有輸出方法,但我寧願不,顯然。 – PaulJWilliams 2010-07-30 08:24:43