首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java: PrintStream意外自动刷新

Java: PrintStream意外自动刷新
EN

Stack Overflow用户
提问于 2012-10-30 11:22:42
回答 1查看 388关注 0票数 2
代码语言:javascript
复制
import java.io.PrintStream;
import java.util.Scanner;
public class OutputTest
{

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        PrintStream out = new PrintStream(System.out); 
        while(true) 
        {
            int in = scan.nextInt();
            if(in == 0) break;
            System.out.println(in*in);
        }
        out.flush();
    }

}

我希望这个程序能获取一个数字列表,每行一个,然后当它达到零时,打印所有的正方形,每行一个。相反,它只是将我输入的每个数字与平方相呼应。

理想情况下,我实际上应该包括这一行:

代码语言:javascript
复制
System.setOut(out);

然后正常地编写我的程序的其余部分(除了最后的刷新),但这有相同的结果,立即回显。

但是,将PrintStream更改为PrintWriter确实可以实现预期的效果,但是我不能执行System.setOut,因为PrintWriter没有扩展OutputStream

为什么这不是我所期望的呢?

EN

回答 1

Stack Overflow用户

发布于 2012-10-30 11:48:08

在任何流或写入器上的flush()意味着“如果有要刷新的东西就刷新”。在手动刷新之前,任何流或编写器都不会有缓冲的预期行为。您可以使用缓冲流包装输出流,但当您指定的缓冲区大小已满时,也会刷新输出流。在您的情况下,最简单的解决方案是写入StringBuffer,然后在收到零值时打印出来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13132170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档