java - 在 Java 中切换 OutputStream 上的编写器

标签 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();
            }
        }
    }
}

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

同花顺合法可靠吗?我应该使用其他方法在同一个流上混合 Writers,还是我绝对不应该那样做?

最佳答案

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

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

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

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

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

关于java - 在 Java 中切换 OutputStream 上的编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1046787/

相关文章:

java - 为什么我可以在java中打开同一个文件写入两次

java - 为 Mac 构建 OpenCV JDK 6 32 位

java - 返回数组索引并同时递增

java - 基本java代码错误

java - arraylist 中的所有对象都具有相同的值

Perl 使用 grep 匹配文件内容或逐行读取

java - 与 log4j 输出的应用程序日志交互的最佳方式(同时也由应用程序更新)

Ruby - 删除文件中的最后一个字符?

Java BufferedWriter 和 OutputStream .close() 方法

android - 通过网络/本地主机发送大文件