首页 > 解决方案 > 保持输出流打开

问题描述

想知道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!
    }
}

这应该确保在每次写入后,某个时候会有刷新。除非应用程序被关闭或类似的......这就是我需要问的原因。

标签: javaiocodenameoneflush

解决方案


我建议关闭输出流stop()并重新打开它start()。请注意,如果流指向FileSystemStorage您可以使用 CN's: 附加到流的末尾OutputStream os = openFileOutputStream(filePath, lengthOfFile);

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

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


推荐阅读