在Java中的OutputStream上切换写入器

Chr*_*uin 4 java file-io outputstream

我有一个方法打开一个文件并传递给另一个函数来写一些数据.第二种方法想要使用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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

除非我在exportRawDataIntoStream的末尾加上'pr.flush',否则这不起作用.我无法关闭PrintWriter,因为它会关闭整个流.

冲洗是否合法可靠?我是否应该使用其他方法将Writers混合在同一个流上,或者我绝对不应该这样做?

Wil*_*ung 5

是的,同花顺应该是可靠的.它的基本作用是"推动"任何多余的数据.

但是,公平地说,这只适用于你的基本作家.记住,我认为这是最大的,如果不是全部的话.

但考虑一些做作的特殊作家.关闭时"做其他事"的事情.像加密或压缩流一样.

比如,你有一个"base64编码器编写器",它无法安全地写出潜在的尾随"==",直到它完成,这是一个关闭,而不是刷新.

但是有了这个警告,对于你使用PrintWriter的情况,它应该不是问题.