【问题标题】:System.out .write() executes but doesn't printSystem.out .write() 执行但不打印
【发布时间】:2014-05-24 09:08:36
【问题描述】:
public class BRRead {
  public static void main(String[] args)   {
    int b;
    b='A';
    System.out .write(b);
    System.out .write('\n');
   }    
}

所以当我执行上述程序时,我得到了预期的输出 - A 但是当注释掉最后一行 System.out.write('\n'); 时,程序执行但不打印输出 - A. 谁能解释一下这里到底发生了什么?

public class BRRead {
  public static void main(String[] args)   {
    int b;
    b='A';
    System.out .write(b);
    //System.out .write('\n');
  }        
}

【问题讨论】:

  • 我敢打赌,当写'\n' 时,sysout 流会被刷新。在第二个示例中,尝试在 System.out.write(b); 之后写 System.out.flush();
  • @ZouZou 这就是原因。需要刷新它的是后台的 PrintStream。

标签: java io


【解决方案1】:
public void write(int b)

将指定的字节写入此流。如果字节是换行符并且 启用自动刷新,然后将调用刷新方法。

在您的示例中,flush() 不会自动调用,如果您明确调用它,则会打印字符。

【讨论】:

【解决方案2】:

来自here

基本上,Java 不保证输出实际发送到 文件、套接字、屏幕或任何其他输出设备,直到您调用 您的 OutputStream 或 Writer 上的 flush(),或直到它关闭。这 OutputStream 或 Writer 可能会缓冲输出,这意味着它将是 保存并以更大的块发送以提高效率。你真的不能 预测这将如何完成。

PrintWriter.println() 会自动调用 flush(),顺便说一下, 虽然这并不重要。但无论如何,一般规则 是如果你想让输出立即出现在某个地方,而你 不使用 PrintWriter.println()(或 PrintStream.println()),然后调用 自己冲洗()。

【讨论】:

    【解决方案3】:

    在代码末尾调用System.out.flush()

    【讨论】:

      【解决方案4】:

      write(int bytevalue) 方法体中,arg 似乎是暂时缓冲/存储的,直到你写一个新行才真正写入。

      【讨论】:

        猜你喜欢
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 2013-06-06
        • 1970-01-01
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        • 2010-10-02
        相关资源
        最近更新 更多