保持输出流打开
Keeping output stream open
请问如何处理代号one中的OutputStream
,必须长期保持打开状态。有很多地方,它们被写入,并且尝试在所有地方刷新流既不高效也不防错。所以我写了这个:
private boolean needsFlush;
private void write(byte[] data) throws IOException {
assert Display.getInstance().isEdt();
out.write(data);
if (!needsFlush) {
needsFlush = true;
Display.getInstance().callSerially(this::flush);
}
}
private void flush() {
try {
out.flush();
needsFlush = false;
} catch (final IOException e) {
throw new RuntimeException(e); // UGLY!
}
}
这应该确保在每次写入之后,某个时候会有刷新。除非应用程序被关闭或类似的......这就是我需要问的原因。
- 可以吗?有没有更好的方法来处理流刷新?
- 当应用程序终止时,它们是否正确关闭?
- 我是否必须将流关闭代码添加到 "main" class 的
stop()
? - 或仅
destroy()
? - 那丑陋的 try-catch 呢?
我建议在 stop()
关闭输出流并在 start()
重新打开它。请注意,如果流指向 FileSystemStorage
,您可以使用 CN 附加到流的末尾:OutputStream os = openFileOutputStream(filePath, lengthOfFile);
.
您需要在 stop()
关闭应用程序,因为该应用程序已发送到后台。在那种状态下,您应该避免打开连接,因为它们可能会被 OS 突然终止。一个任性的流可能会导致整个应用程序被杀死。
如果您在应用程序中有后台支持,您应该在每次需要时打开和关闭流。