繁体   English   中英

Java OutputStream.write()抛出错误的文件描述符,但刷新正常

[英]Java OutputStream.write() throws Bad file descriptor but flush works

我正在编写使用像这样的可逆文件流的代码

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)
   }
}

我收到消息IOExceptionsBad file descriptor

该方法正在获取FileOutputStream

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

flush()取决于所使用的OutputStream的实现。 此方法的抽象OutputStream类实现不执行任何操作。 如果OutputStream子类从不缓冲输出,则很可能不会实现此方法,并且flush()将不执行任何操作。 即使没有缓冲输出,即使flush()对通过的实现做了一些操作,它也很可能立即返回。

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

我自己弄清楚了

我在写入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() )之后,它开始工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM