2014-01-15 101 views
0

我嘗試使用BufferedStream創建我自己的類,以便將系統輸出流輸出到控制檯並同時輸出到文件。但是數據不會從BufferedOutputStream中出現。我應該如何解決這個問題?爲什麼BufferedOutputStream不輸出數據?

package com.library.stream; 

import java.io.BufferedOutputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

public class DoubleEndedStream { 
InputStream theInput; 
OutputStream theOutput; 

public static void main(String[] args) throws IOException, FileNotFoundException { 
    DoubleEndedStream sr = new DoubleEndedStream(System.in, System.out); 
    sr.doublingTheStream(); 
} 

public DoubleEndedStream(InputStream in, OutputStream out) { 
    theInput = in; 
    theOutput = out;  
} 

public void doublingTheStream() throws IOException, FileNotFoundException { 
    try { 
     FileOutputStream fos = new FileOutputStream("C:\\log.txt"); 
     BufferedOutputStream bout1 = new BufferedOutputStream(fos); 
     BufferedOutputStream bout2 = new BufferedOutputStream(theOutput); 
     try { 
      while (true) { 
       int datum = theInput.read(); 
       if (datum == -1) break; 
       bout1.write(datum); 
       bout2.write(datum); 
      } 
      bout1.flush(); 
      bout2.flush(); 
     } catch (IOException e) { 
      System.err.println("Couldn't read from System.in!"); 
     } 

     bout1.close(); 
     bout2.close(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     System.err.println("Couldn't find log.txt"); 
    } 
} 

}

+0

您是否遇到BufferedOutputStrem控制檯,文件或兩者的問題? – Narkha

+0

你需要刷新你的流。它在寫入之前填滿緩衝區。 – Kayaman

+0

它是否拋出異常?我認爲如果(datum == -1)中斷;這部分在程序啓動時執行,因爲可能沒有數據並且循環被破壞。 – SaurabhJinturkar

回答

0

由於theInputSystem.in,只要你不(在UNIX ctrl-d)關閉它,它不會返回-1,但掛並等待輸入。由於您僅在收到-1時才執行flush(),因此您永遠無法達到這一點。改爲在write()之後嘗試沖洗。

+0

但是,如果我每次刷寫BufferedStream的優勢都會被沖掉 – cadmy

+0

因此每3或5次沖洗一次,或者任何你認爲適合的內容。 – MByD