【问题标题】:Make PrintWriter or OutputStreamWriter print immediately立即打印 PrintWriter 或 OutputStreamWriter
【发布时间】:2012-11-01 06:56:39
【问题描述】:

有没有办法在调用.write 方法后立即打印PrintWriterOutputStreamWriter?我为PrintWriter 开启了autoFlush。然而对于这两个类,只有在编写器关闭时才会打印内容。

为了它的价值,我使用Writers 因为我需要对控制台输出、文件输出和字符串输出进行抽象。

谢谢!

编辑:

显示问题的SSCCE

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        PrintWriter p = new PrintWriter(System.out, true);
        Scanner read = new Scanner(System.in);
        while (read.hasNextLine()) {
            String input = read.nextLine();
            if (input.equals("end"))
                break;
            p.write(input);
        }
        p.close();
    }
}

/* Sample run: (first four lines are input)
cow
mow
pow
end
cowmowpow
*/

【问题讨论】:

  • 请展示一个简短但完整的程序来演示问题。
  • 既然是Writer,为什么不直接调用println(),它会在关闭流的同时立即刷新数据?
  • @JonSkeet,请检查编辑。
  • @Eng.Fouad,因为println 不是java.io.Writer 的成员。

标签: java io printwriter


【解决方案1】:

autoFlush 构造函数参数的文档说:

一个布尔值;如果为 true,println、printf 或 format 方法将刷新输出缓冲区

鉴于您没有使用这些方法中的任何一种,它没有帮助也就不足为奇了。

最简单的方法是在每个write 之后手动调用flush() - 毕竟这是您想要实现的目标。我不知道有什么东西会在每次写入后默认使写入器刷新。

当然,您可以编写自己的包装类——相当于BufferedWriter,但效果相反。它可以将所有方法委托给包装的编写器,然后立即调用flush()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2023-03-10
    相关资源
    最近更新 更多