Java中的ObjectOutputStream类中的drain()vs flush()

时间:2017-11-01 03:01:26

标签: java

当我看到下面这两种方法的描述时,我对它们感到有点困惑。

  

protected void drain():与flush类似,但不会将flush传播到基础流。

     

void flush():写入任何缓冲的输出字节并刷新到底层流。

例如:

FileOutputStream out = new FileOutputStream("test.txt");   

ObjectOutputStream oout = new ObjectOutputStream(out);

问题1:
如果我调用oout.flush(),它将强制将ObjectOutputStream中的输出数据写入底层的FileOutputStream,但它不保证随后将这些数据从FileOutputStream写入到文件“test.txt”中。因为我没有打电话给out.flush()这个磁盘,这是正确的吗?

问题2:
如果我致电oout.drain()怎么办?

  • 将执行哪些处决?

2 个答案:

答案 0 :(得分:0)

Flush会将数据写入test.txt。但是,排水类似于冲洗,但不会将冲洗传播到下面的流。

答案 1 :(得分:0)

  

问题1:

     

如果我致电oout.flush(),,它会强制将ObjectOutputStream中的输出数据写入基础FileOutputStream,,但不保证随后会写入这些数据从FileOutputStream到文件" test.txt"因为我不打电话给out.flush(),所以在磁盘中,我是对的吗?

不,你错了。它 刷新FileOutputStream。但是,由于FileOutputStream没有缓冲或刷新,实际上在这种情况下drain()flush()之间没有区别。如果BufferedOutputStream周围有FileOutputStream,则会有所不同。

  

问题2:

     

如果我致电oout.drain()怎么办?将执行哪些处决?

它会刷新ObjectOutputStream但不会刷新底层流,就像它在Javadoc中所说的那样。

你已经设法让这完全回到了前面。我无法理解:Javadoc非常清楚。此外,由于drain()protected,因此无论如何都不是您的业务。