java - 保持输出流打开
问题描述
想知道codenameone里面的s怎么处理,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()
“主”类? - 还是只为了
destroy()
? - 丑陋的try-catch怎么样?
解决方案
我建议关闭输出流stop()
并重新打开它start()
。请注意,如果流指向FileSystemStorage
您可以使用 CN's: 附加到流的末尾OutputStream os = openFileOutputStream(filePath, lengthOfFile);
。
stop()
当应用程序发送到后台时,您需要关闭。在这种状态下,您应该避免打开连接,因为它们可能会被操作系统突然终止。整个应用程序可能会因为一个任性的流而被杀死。
如果您在应用程序中有后台支持,您应该在每次需要时打开和关闭流。
推荐阅读
- html - 在 CSS 中隐藏其他元素
- r - 获取向量的多个总和,包括由 NA 划分的许多因子水平
- twitter-bootstrap - Bootstrap 4 的基本查询
- javascript - 使用 moment.js 或使用 JQuery/Javascript 以英文和日文显示日期
- amazon-web-services - 构建推送警报的 Alexa 技能
- razor-pages - Razor Pages asp-page-handler OnPostcustom 未触发
- uwsgi - uWSGI 试图加载不存在的 ini
- xml - 是没有打开问题的封闭标签吗?
- javascript - 具有多个日期选择的 Jquery DatePicker
- php - 合并来自单个数据集的关联数据