java - 保持输出流打开

标签 java io codenameone flush

我想知道如何处理 codenameone 中的 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 附加到流的末尾:OutputStream os = openFileOutputStream(filePath, lengthOfFile);

当应用程序被发送到后台时,您需要在 stop() 上关闭。在那种状态下,您应该避免打开连接,因为它们可能会被操作系统突然终止。整个应用程序可能会因为任性的流而被杀死。

如果您在应用程序中有后台支持,您应该在每次需要时打开和关闭流。

关于java - 保持输出流打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53257524/

相关文章:

java - 如何使用 jar 文件中的 Liquibase 变更日志

java - 用于单元测试的备用 SLF4J 绑定(bind)或配置?

java - GWT - 如何异步发送表单?

java - 为什么在将文本转换为 java 中的 xls 文件后写入文本时,输出会发生移位

java - 使用外部 Intent/应用程序打开文件

java - 如何仅运行 junit 测试直到达到特定测试

Android ContentProvider 和 Google IO Rest Talk

java - Sencha、Touc4J、Codenameone 和 Phonegap?

codenameone - 如何获取iphone的唯一识别码

java - 是否可以将 SSL 证书附加到代号一中的此 WebBrowser 组件?