繁体   English   中英

Java socket readLine() 方法异常行为

[英]Java socket readLine() method strange behavior

我在套接字服务器中有以下代码片段进行测试。

try (BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    PrintWriter out = new PrintWriter(client.getOutputStream(), true)){

    String input;
    while ((input = in.readLine()) != null) {
        if (input.equalsIgnoreCase("exit")) {
            System.out.println("Received `exit`... closing client " + client.getRemoteSocketAddress());
            break;
        }

        System.out.println("Received: " + input);
        out.println("OK");
    }
} catch(IOException e) {
    e.printStackTrace();
}

当我用空白向它发送一行时,例如Hello World ,它只打印Hello 似乎readLine()方法的行为就像在读取空白时终止了行。

是字符编码问题还是什么? 任何帮助将非常感激。

在评论中,您提到了如何发送数据:

Scanner keyboard = new Scanner(System.in);
out.println(keyboard.next());

实际上, Scanner.next()调用分别返回每个单词,如文档中所述

Scanner使用分隔符模式将其输入分解为标记,默认情况下匹配空格

天真地,您可能希望在键入空格后立即在服务器上看到Hello 这不会发生,因为输入 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 默认情况下是行缓冲的,因此在您按 Enter 之前Scanner看不到任何输入。

要逐行读取输入,您不需要Scanner 只需将System.in包装在BufferedReader中并使用其readLine()方法。

暂无
暂无

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

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