Java 我创建了一个打开自动刷新的PrintWriter;为什么不是';是自动冲洗吗?

Java 我创建了一个打开自动刷新的PrintWriter;为什么不是';是自动冲洗吗?,java,io,flush,printwriter,Java,Io,Flush,Printwriter,我的客户端是一个web浏览器,并使用以下url向myserver发送请求: http://localhost 这是服务器端代码。问题在于servingtread类的run方法 class ServingThread implements Runnable{ private Socket socket ; public ServingThread(Socket socket){ this.socket = socket ; System.out.p

我的客户端是一个web浏览器,并使用以下url向myserver发送请求:
http://localhost

这是服务器端代码。问题在于
servingtread
类的run方法

class ServingThread implements Runnable{
    private Socket socket ;

    public ServingThread(Socket socket){
        this.socket = socket ;
        System.out.println("Receives a new browser request from "
                      + socket + "\n\n");
    }

    public void run() {
        PrintWriter out = null ;

        try {
            String str = "" ;
            out = new PrintWriter( socket.getOutputStream() ) ;
            out.write("This a web-page.") ;
            // :-(
            out.flush() ;
            // :-(
            socket.close() ;
            System.out.println("Request successfully fulfilled.") ;
        } catch (IOException io) {
            System.out.println(io.getMessage());
        }
    }
}
我是否正在使用

out = new PrintWriter( socket.getOutputStream(), true ) ;

输出未到达浏览器。 只有在使用stream手动刷新时,输出才会进入浏览器

out.flush() ;
我的问题:
新的PrintWriter(socket.getOutputStream(),true)
应该自动刷新输出缓冲区,但它没有这样做。为什么?

来自:

参数:
out
-输出流
自动刷新
-布尔值;如果为true,则
println
printf
format
方法将刷新输出缓冲区


它并没有说
write()
将刷新输出缓冲区。试着改用
println()
,它会像你期望的那样刷新。

我按照你的建议试过了,它正常工作。因此,只有println被认为是刷新的,而write,print则不是。文档中没有提到哪些方法与自动刷新兼容,哪些不兼容。那么,人们是如何知道这一点的呢文档中提到了它,只是不针对单个方法。但是有太多重载的write、print、printf和println方法。我是如何知道哪个1与自动刷新兼容的,或者只有以ln结尾的方法支持自动刷新的。直到我在研究你的问题时看到它,我才知道。这是一个可怕的实现!在printWriter上设置自动刷新不会导致自动刷新!。
out.flush() ;