Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OutputStream.write()抛出错误的文件描述符,但flush可以工作_Java_Ioexception_Outputstream - Fatal编程技术网

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

Java OutputStream.write()抛出错误的文件描述符,但flush可以工作,java,ioexception,outputstream,Java,Ioexception,Outputstream,我正在编写这样一个使用文件流的代码 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

我正在编写这样一个使用文件流的代码

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)
   }
}
公共静态void writeBlock(OutputStream流,float[]数据,字节起始位置)
{
int i=0;
对于(i=startPosition;i
我收到
IOExceptions
消息:
Bad file descriptor

方法是获取
文件输出流

但是,如果文件描述符第一次工作,它怎么可能是坏的呢。 我的问题在哪里? 提前感谢您的帮助

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


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

我自己解决了

我用写入
的方法打开了另一个流(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)
  }
}
公共静态void writeBlock(OutputStream流,float[]数据,字节起始位置)
{
int i=0;
//比特流比特流初始化
对于(i=startPosition;i

在我删除了那行(
bistream.close()
)之后,它工作了。

是的,一开始不需要刷新,但我想证明它工作了。但我该如何解决这个问题呢?我的问题是write()抛出exception@AlexanderWohltan
flush()
的默认实现不执行任何操作,因此除非子类重写它(例如
FileOutputStream
执行),否则我不关心
flush()
。它被FileOutputStream覆盖至少在openjdk 8中它不是您需要的信息吗?我的代码很长,我想这更容易解释,但是如果你想要代码,我会发布它。为什么所有的刷新?切勿在回路内冲洗。将一个放在末尾。失败的原因是您的
BitOutputStream
被包装在
FileOutputStream
上,因此关闭第一个会关闭第二个。