Интересно, как поступить с 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!
}
}
, что должно гарантировать, что после каждой записи когда-нибудь произойдет сброс.Если приложение не будет закрыто или похоже ... вот почему я должен спросить.
- Это нормально?Есть ли лучший способ обработки очистки потока?
- Правильно ли они закрываются после завершения работы приложения?
- Нужно ли добавлять код закрытия потока в
stop()
"main"класс? - Или только на
destroy()
? - А как насчет уродливой попытки-ловли?