繁体   English   中英

打印作家write()和println()

[英]Print Writer write() and println()

我目前正在学习Java网络编程。 在我的一个程序中,我只有一个EchoServer,它可以发送客户端消息。 但是我在客户端意识到,当.println()方法可以正常工作时,当我关闭书写器时, Printwriter.write()方法才发送。 我也尝试过有无自动冲洗功能。

作品:

public static void main(String[] args) {
    System.out.println("Simple Echo Client");

    try{
        System.out.println("Waiting for Connection ...");
        InetAddress localAdress = InetAddress.getLocalHost();

        try(Socket clientSocket = new Socket(localAdress,6000);
                PrintWriter out =new PrintWriter(clientSocket.getOutputStream(),true);
                BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))){

            System.out.println("Connected to Server");
            Scanner scanner = new Scanner(System.in);
            while(true){
                System.out.print("Enter text: ");
                String inputLine = scanner.nextLine();
                if("quit".equals(inputLine)){
                    break;
                }
                out.println(inputLine);
                String response = br.readLine();
                System.out.println("Server response" + response);
            }
        }

    }catch(IOException ex){
        ex.printStackTrace();
    }
}

不起作用:

public static void main(String[] args) {
    System.out.println("Simple Echo Client");

    try{
        System.out.println("Waiting for Connection ...");
        InetAddress localAdress = InetAddress.getLocalHost();

        try(Socket clientSocket = new Socket(localAdress,6000);
                PrintWriter out =new PrintWriter(clientSocket.getOutputStream(),true);
                BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))){

            System.out.println("Connected to Server");
            Scanner scanner = new Scanner(System.in);
            while(true){
                System.out.print("Enter text: ");
                String inputLine = scanner.nextLine();
                if("quit".equals(inputLine)){
                    break;
                }
                out.write(inputLine);
                String response = br.readLine();
                System.out.println("Server response" + response);
            }
        }

    }catch(IOException ex){
        ex.printStackTrace();
    }
}

有人可以向我解释为什么会这样吗?

Printwriter.write()方法仅在我关闭writer时发送,而.println()方法可以正常工作

似乎这里有两个问题,第一个与写作有关,第二个与阅读有关:

  1. 该代码创建具有自动行刷新的PrintWriter 使用println ,新行将导致写入器刷新。 当使用write而不换行,在PrintWriter不冲水(你可以打电话out.flushout.write给力的冲洗Writer )。

  2. 假定接收端正在使用Scanner.readLine() ,则它期望有新行,或者将等待直到收到新行。 println自动将新行添加到String的末尾,必须使用write显式发送新行out.write(line + "\\n");

是的,我之前绝对见过。 如果您使用的是具有自动刷新功能的PrintWriter或其他Writer,则无需调用flush()。 但是,否则,要发送消息,必须调用flush()来获取Writer / OutputStream中的内容以发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM