gpt4 book ai didi

Java:PrintStream 意外自动刷新

转载 作者:行者123 更新时间:2023-11-30 09:30:46 27 4
gpt4 key购买 nike

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

}

我希望这个程序获取一个数字列表,每行一个,然后当它达到零时,打印它们的所有正方形,每行一个。相反,它只是回应我用方 block 键入的每个数字。

理想情况下,我实际上会包含以下行:

System.setOut(out);

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

然而,将 PrintStream 更改为 PrintWriter 确实使这项工作按预期进行,但是我无法执行 System.setOut 因为 PrintWriter 不扩展 OutputStream

为什么这不像我预期的那样表现?

最佳答案

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

关于Java:PrintStream 意外自动刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com