为什么flush()在PrintWriter上影响println()

时间:2013-03-19 21:44:01

标签: java stream

我有服务器的基本代码:

        ServerSocket serverSocket = new ServerSocket(14000);
        Socket clientSocket = serverSocket.accept();
        BufferedReader in = new BufferedReader(
                new InputStreamReader(clientSocket.getInputStream()));
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
        String incoming;
        while((incoming = in.readLine()) != null){
            System.out.println("Client Says: " + incoming);
            out.println("Client Says: " + incoming);
            out.flush();
            //if(incoming.equals("HELLO")) break;
        }
        clientSocket.close();
        serverSocket.close();

我正在努力进一步了解溪流,因为他们给了我一些严重的麻烦。根据我的阅读,println方法会自动为您刷新,但是除非之后调用flush方法,否则不会将此行传递给客户端?我只想找到一个很好的解释呢?

2 个答案:

答案 0 :(得分:2)

要启用PrintWriter的自动刷新,必须将其构造函数的第二个参数设置为true。

答案 1 :(得分:1)

之前我遇到过这个问题,只是:

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

这将有所作为。如果你没有autoflush你可以得到一些错误或接收数据为null,它发生在我不久前。最好的问候。