我用autoflush创建了一个PrintWriter; 为什么不是自动冷却?

mog*_*gli 8 java io flush printwriter

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

这是服务器端代码.问题在于ServingThread类的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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否正在使用

out = new PrintWriter( socket.getOutputStream(), true ) ;
Run Code Online (Sandbox Code Playgroud)

要么

out = new PrintWriter( socket.getOutputStream() ) ;
Run Code Online (Sandbox Code Playgroud)

输出没有进入浏览器.仅当我使用流手动刷新时,输出才会进入浏览器

out.flush() ;
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ers 20

来自Javadocs:

参数:

out- 输出流
autoFlush- 布尔值; 如果为true,则println,printfformat方法将刷新输出缓冲区

它没有说write()会刷新输出缓冲区.尝试使用println(),它应该像你期望的那样冲洗.