2014-10-08 23 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

相关问题