2014-10-08 22 views
0

我寫一個使用文件流可逆這樣的Java OutputStream.write()拋出錯誤的文件描述符,但沖水作品

public static void writeBlock(OutputStream stream, float[] data, byte startPosition) 
{ 
    int i = 0; 
    for(i = startPosition; i < data.length; i++) 
    { 
     // Code 
     stream.flush(); 
     stream.write(someByte); // throws Exception at second call 
     if(someCondition) 
     { 
     break; 
     } 
    } 
    stream.flush(); 
    if(i < data.length) 
    { 
     writeBlock(stream, data, i) 
    } 
} 

我與消息越來越IOExceptions代碼:Bad file descriptor

的方法正在獲得FileOutputStream

但是,如果文件描述符第一次工作,文件描述符如何可能不好。 我的問題在哪裏? 感謝您的幫助提前

+0

爲什麼所有的沖水?切勿在循環內沖洗。把一個放在最後。 – EJP 2014-11-01 05:15:02

回答

0

我想通了由自己

我在寫stream的方法打開了另一流(BitOutputStream),之後關閉該比特流。

public static void writeBlock(OutputStream stream, float[] data, byte startPosition) 
{ 
    int i = 0; 

    //Bitstream bitstream init 

    for(i = startPosition; i < data.length; i++) 
    { 
    // Code 
    stream.flush(); 
    stream.write(someByte); // throws Exception at second call 
    if(someCondition) 
    { 
     break; 
    } 
    } 
    bitstream.close(); 
    stream.flush(); 
    if(i < data.length) 
    { 
    writeBlock(stream, data, i) 
    } 
} 

我刪除該行後(bistream.close())它的工作。

+0

這個失敗的原因是因爲你的'BitOutputStream'包裝在'FileOutputStream'中,所以關閉第一個關閉。 – EJP 2014-11-01 06:32:27

1

flush()取決於正在使用的OutputStream的實施。此方法的抽象OutputStream類實現什麼都不做。如果OutputStream子類永遠不會緩衝輸出,它很可能不會實現此方法,並且flush()將不會執行任何操作。即使flush()爲通過的實現做了一些事情,如果沒有緩衝輸出,它很可能會立即返回。

傳遞給OutputStream的文件有問題。需要更多的信息來找出問題所在。

+0

是的,首先沖洗沒有必要,但我想表明它的工作原理。 但我應該如何解決這個問題?我的問題是,write()拋出一個異常 – 2014-10-08 21:21:35

+0

@AlexanderWohltan flush()的默認實現什麼都不做,所以除非一個子類重寫它(例如'FileOutputStream')... – Powerlord 2014-10-08 21:23:12

+0

我不在乎'沖洗()'。 它被FileOutputStream覆蓋 – 2014-10-08 21:26:02

相關問題