Java System.out.write方法是否刷新流?

Java System.out.write方法是否刷新流?,java,Java,您好,我是java新手,我正在读赫伯特·席尔德的书。 所以我的第一个问题 我想知道在上面的程序中,print()method会在末尾的换行符后作为println()刷新流 执行System.out.write()方法刷新流?。 请具体说明 是的,System.out.print和System.out.write也会刷新流 (edit:似乎只有在输入字符串包含换行符时才刷新流) 如果从java.io查看PrintStream.java的源代码,您可以看到源代码: public class Test

您好,我是java新手,我正在读赫伯特·席尔德的书。 所以我的第一个问题

  • 我想知道在上面的程序中,
    print()
    method会在末尾的换行符后作为
    println()
    刷新流
  • 执行
    System.out.write()方法刷新流?。
    请具体说明

  • 是的,
    System.out.print
    System.out.write
    也会刷新流

    edit:似乎只有在输入字符串包含换行符时才刷新流)

    如果从
    java.io
    查看
    PrintStream.java
    的源代码,您可以看到源代码:

    public class Test {
     public static void main(String..args) {
        System.out.println("Testing.");
        System.out.print("Testing Again.");
        }
      }
    
    private void write(char buf[]{
    试一试{
    已同步(此){
    重新打开();
    textOut.write(buf);
    textOut.flushBuffer();
    charOut.flushBuffer();
    如果(自动刷新){
    对于(int i=0;i
    来自

    Println()
    通过写入行分隔符字符串终止当前行。行分隔符字符串由系统属性line.separator定义,不一定是单个换行符('\n')

    println(String)
    打印一个字符串,然后终止该行。此方法的行为就像调用print(String)然后调用println()

    print()
    打印一个对象。string.valueOf(Object)方法生成的字符串根据平台的默认字符编码转换为字节,这些字节完全按照write(int)方法的方式写入

    write()
    将指定的字节写入此流。如果字节是换行符并且启用了自动刷新,则将调用刷新方法。 请注意,字节是按给定方式写入的;要编写将根据平台的默认字符编码进行翻译的字符,请使用print(char)或println(char)方法

    编辑:-要添加一条imp行,
    可选,可以创建打印流以便自动刷新;这意味着在写入字节数组、调用某个println方法或写入换行符或字节('\n')后,将自动调用flush方法。


    创建启用自动刷新的printstream对象
    out=new PrintWriter(.getOutputStream(),true)

    DownVorters,既然这个问题的格式正确,我看不出这个问题怎么是无效的?它与溪流和冲刷有关。我没有投反对票,但我很确定twitch是在看到“请帮助我学习语言”而不是专门询问outputstream函数后得到的。太棒了!标题现在更好地反映了您的问题。据我所知,这回答了问题,那么为什么它被否决了?@maja我不确定,但streams api的级别相当低。最好的猜测是
    checkError()
    方法被用于其他地方。在我的书中,程序语句是这样的。char ch='A';系统输出写入(ch);System.out.write('\n');现在我认为它不符合您对write()的解释。@user3545458我认为您是对的-只有当字符串包含换行符时,底层流
    out
    才会刷新。
    private void write(char buf[]) {
        try {
            synchronized (this) {
                ensureOpen();
                textOut.write(buf);
                textOut.flushBuffer();
                charOut.flushBuffer();
                if (autoFlush) {
                    for (int i = 0; i < buf.length; i++)
                        if (buf[i] == '\n')
                            out.flush();
                }
            }
        }
        catch (InterruptedIOException x) {
            Thread.currentThread().interrupt();
        }
        catch (IOException x) {
            trouble = true;
        }
    }