我们有一个库来缓冲其操作以提高性能。调用者可以调用flush()
方法强制它开始执行操作。
但是现在,flush()
方法以一种异步开始执行操作的方式实现。
也就是说,当调用者调用flush()
方法时,它将开始在不同的线程中执行操作,而flush()
方法只返回。
这样,调用者在调用close()
方法之前不知道操作是否完整(他们必须通过检查操作的结果找出它)。
我想通过调用flush()
调用块来修复它,直到所有操作完成。
在此之前,我想确保flush()
方法应该阻止。但API文档并没有指定这样的合同。
通过将任何缓冲的输出写入基础流来刷新此流。
刷新此输出流并强制执行任何缓冲的输出字节 写出来。冲洗的一般合同是称之为 指示,如果先前写入的任何字节已被缓冲 输出流的实现,这样的字节应该立即 写到他们预定的目的地。
如果此流的预期目标是提供的抽象 通过底层操作系统,例如文件,然后刷新 流只保证先前写入流的字节 被传递到操作系统进行写入;它不保证 他们实际上写入了一个物理设备,如磁盘 驱动。
OutputStream的flush方法不执行任何操作。
在写入输出之前,两个文档都没有指定任何关于阻塞的内容。
但对flush()
的一般理解是什么,如果它是阻止呼叫?
答案 0 :(得分:2)
API文档未指定类似的合同。
是的。
Javadoc引用都来自OutputStream
系列,它本身就阻止了所有操作。如果异步执行,则无法“保证以前写入流的字节被刷新”。
解决方案:不要。