Java OutputStream.write()抛出错误的文件描述符但是flush工作

时间:2014-10-08 21:11:58

标签: java ioexception outputstream

我正在编写使用文件Stream的代码,像这样

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

但如果第一次工作,文件描述符怎么会坏。 我的问题在哪里? 感谢您的帮助

2 个答案:

答案 0 :(得分:1)

flush()取决于正在使用的OutputStream的实现。此方法的抽象OutputStream类实现不执行任何操作。如果OutputStream子类永远不会缓冲输出,则很可能不会实现此方法,flush()将不执行任何操作。即使flush()为没有缓冲输出的传递实现做了某些事情,也很可能只是立即返回。

传递给OutputStream的文件有问题。需要更多信息来确定问题所在。

答案 1 :(得分:0)

我自己想出来了

我在写入stream的方法中打开了另一个Stream(BitOutputStream),然后关闭了这个bitStream。

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())后,它有效。