当我看到下面这两种方法的描述时,我对它们感到有点困惑。
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()
怎么办?
答案 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
,因此无论如何都不是您的业务。