让我们说我有一个后台任务,该任务每5s通过FileOutputStream向文件写入一个随机字母。 1分钟后,流将关闭,任务将停止。假设该应用程序随后可能在NPE上的UI线程中崩溃了30秒钟,而我们再也无法关闭流了。
文件是否保存我们已经写入的文件?还是我们失去了一切?
答案 0 :(得分:1)
这实际上取决于您使用的OutputStream的实现,因为它是抽象类。实际上与文件系统进行交互并将某些内容写入文件的方法是flush()。
例如,PrintStream能够在每次写入时自动刷新。
编辑:FileOutputStream没有包装在任何缓冲功能中,因此它应该立即将每个字母写入文件;崩溃后,该文件将保留您的字母。
答案 1 :(得分:1)
我认为这取决于您发送给流的字符是否仍在流存储缓冲区中。出于性能原因,大多数流将使用某种类型的内存缓冲区。 IO代码异常处理的一种常见模式是在finally {}块中对流调用close(),以确保无论是否发生异常,流都被关闭(并刷新)。