2013-07-20 52 views
1

甲骨文documentation說:FilterOutpuStream是否正常執行寫操作?

寫(字節[] B,詮釋斷,INT LEN)拋出IOException異常

len個字節寫入從指定的字節數組偏移量off開始 此輸出流。 FilterOutputStream的寫入方法在要輸出的每個字節上調用一個參數的寫入方法 。

注意,此方法不叫其基本 輸入的write方法使用相同參數。 FilterOutputStream 的子類應提供此方法的更高效的實現。

我有兩個問題:

  1. this頁我發現,使用FilterOutputStreamFileOutputStream裝飾,並寫入正常輸出到文件的代碼。爲什麼FilterOutputStream在每個字節上調用write()底層流的方法,何時它可以調用基礎流上的相同過載並使操作更快?
  2. 爲什麼基礎流輸入流?

謝謝。

回答

2
  1. 相信的一點是,如果你想要一個很簡單的過濾,你可以重寫write(int)方法,知道一切都將通過這一點。這將是低效的,但工作。所以,如果你想它過濾掉所有偶數字節流,你能做到這一點很容易:

    public class OddByteOutputStream extends FilterOutputStream 
    { 
        public OddByteOutputStream(OutputStream output) 
        { 
         super(output); 
        } 
    
        @Override 
        public void write(int b) 
        { 
         if ((b & 1) == 1) 
         { 
          out.write(b); 
         } 
        } 
    } 
    

    另一種方法是一直做write(byte[])代表,但要write(int)write(byte[], int, int)抽象,以子類研究如何合理高效地處理呼叫。

  2. 這只是一個錯字,我懷疑。

+0

謝謝。還有一個可選的問題:是否必須在自己的此方法覆蓋中調用'super()'版本? – user35443

+0

@ user35443:'write(byte [],int,int)'?絕對不會 - 這樣做會導致重複數據,假設你也是*然後在你的覆蓋中自己處理數據。 –

+0

非常感謝!... – user35443

相關問題