Java 为什么flush()会影响PrintWriter上的println()

Java 为什么flush()会影响PrintWriter上的println(),java,stream,Java,Stream,我有服务器的基本代码: ServerSocket serverSocket = new ServerSocket(14000); Socket clientSocket = serverSocket.accept(); BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream()));

我有服务器的基本代码:

        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方法,否则这一行不会传递给客户机?我只是想得到一个很好的解释?

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

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

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

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

这将带来不同。如果你不自动刷新,你可能会得到一些错误或接收数据为空,这发生在我一段时间前。致以最诚挚的问候。

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

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

这将带来不同。如果你不自动刷新,你可能会得到一些错误或接收数据为空,这发生在我一段时间前。致以最诚挚的问候。

唉,像往常一样,你会花几个小时研究一些东西,一旦你发布了问题,你就会意识到答案。PrintWriter要求将“自动刷新”设置为true。您可能希望为自己的问题编写答案并自行接受。网络应用程序不自动刷新很好。为什么不自动刷新是个好主意?刷新很昂贵。你不希望意外脸红。唉,像往常一样,你会花几个小时研究一些东西,一旦你发布了问题,你就会意识到答案。PrintWriter要求将“自动刷新”设置为true。您可能希望为自己的问题编写答案并自行接受。网络应用程序不自动刷新很好。为什么不自动刷新是个好主意?刷新很昂贵。你不想意外的脸红。