4

我有一种方法可以打开文件并传递给另一个函数以向其中写入一些数据。第二种方法想要使用 PrintWriter 来写入其数据。但是,我不想要求每个人都使用 PrintWriter 写入该流。

目前它看起来像这样(经过消毒的示例......不要费心批评我选择的方法或变量名)

public void exportRawDataIntoStream(OutputStream os) {
    PrintWriter pr = new PrintWriter(os);
    printFirstData(pr);
    printSecondData(pr);
}

public void exportToFile(File file) {
    OutputStream os = null;
    try {
        os = new BufferedOutputStream(new FileOutputStream(file));
        exportRawDataIntoStream(os);
                doMoreWithTimeFile(os);
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (Exception e ) {
                e.printStackTrace();
            }
        }
    }
}

这不起作用,除非我在 exportRawDataIntoStream 的末尾放了一个“pr.flush”。我无法关闭 PrintWriter,因为这会关闭整个流。

冲洗合法且可靠吗?我应该使用其他方法在同一个流上混合 Writer,还是我绝对不应该这样做?

4

1 回答 1

5

是的,冲洗应该是可靠的。它的基本作用是“推动”任何多余的数据。

但是,公平地说,这只适用于您的基本作家。请注意,我认为这是大多数,如果不是全部的话。

但是考虑一些人为的特殊类型的作家。关闭时“做其他事情”的东西。就像加密或压缩流一样。

比如说,你有一个“base64 编码器编写器”,它不能安全地写入潜在的尾随“==”,直到它完成,这是关闭,而不是刷新。

但是需要注意的是,对于您使用 PrintWriter 的情况,这应该不是问题。

于 2009-06-26T00:24:50.943 回答