在OutputStream上调用close()会切断输出到日志文件

时间:2016-05-02 18:42:15

标签: java io stream

我正在调查x.replace(/\n/g, "</br>"); 导致截止问题的问题。该程序在两个不同的服务器上运行,但具有相同的截止问题。看来日志文件没有正确刷新。所以我决定深入研究.close()源代码。我没有看到.close()被调用。我错过了什么吗?我们应该一直打电话给.flush()吗?根据这个答案,它应该无关紧要:http://www.w3schools.com/jsref/jsref_replace.asp

我在说什么:

.flush()

稍后我致电 private static void write_to_file(String incoming){ output_stream.write(incoming); output_stream.write(System.lineSeparator()); }

源代码:

output_stream.close();

日志文件:

 /**
 * Closes the stream and releases any system resources associated
 * with it. Closing a previously closed stream has no effect.
 *
 * @see #checkError()
 */
public void close() {
    try {
        synchronized (lock) {
            if (out == null)
                return;
            out.close();
            out = null;
        }
    }
    catch (IOException x) {
        trouble = true;
    }
}

1 个答案:

答案 0 :(得分:2)

正如您已正确指出的question所述,在流上调用select * from workpaths where to_date(wp_stime, 'hh24') between 9 and 17; 就足以刷新您写入流中的内容。如果输出被截断,则存在一些常见的缺陷:

  • 未调用您的close()方法,例如如果您将其放在close()块中而不是catch;)

  • 在自定义流上调用finally并不会将调用传播到基础流。

  • 如果您没有将String正确转换为字节,问题也可能出现在编码中。