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@AlexanderWohltanflush()
的默认实现不执行任何操作,因此除非子类重写它(例如FileOutputStream
执行),否则我不关心flush()
。它被FileOutputStream覆盖至少在openjdk 8中它不是您需要的信息吗?我的代码很长,我想这更容易解释,但是如果你想要代码,我会发布它。为什么所有的刷新?切勿在回路内冲洗。将一个放在末尾。失败的原因是您的BitOutputStream
被包装在FileOutputStream
上,因此关闭第一个会关闭第二个。