我创建了自动冲洗上一个PrintWriter; 为什么没有autoflushing?(I cre

2019-09-22 10:21发布

我的客户是一个网页浏览器,并发送请求使用这个网址为myserver: http://localhost

这是服务器端的代码。 问题就出在的run方法ServingThread类。

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

要么

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

输出不来给浏览器。 输出来临到浏览器只有当我使用手动冲洗使用流

out.flush() ;

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

Answer 1:

从的Javadoc :

参数:

out -一个输出流
autoFlush -一个布尔值; 如果为真,则printlnprintf ,或format方法将刷新输出缓冲区

这并不是说write()将刷新输出缓冲区。 尝试使用println()代替,它应该像冲洗你指望它。



文章来源: I created a PrintWriter with autoflush on; why isn't it autoflushing?