bufferedreader JavasocketreadLine()方法奇怪的行为
我在socket服务器中有以下代码片段用于测试
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()
方法的行为类似于在读取空白时终止行
这是一个字符编码问题还是什么?任何帮助都将不胜感激
# 1 楼答案
在评论中,您提到了如何发送数据:
实际上,
Scanner.next()
调用分别返回每个单词,如the documentation中所述:天真地说,您可能希望在键入空格后立即在服务器上看到
Hello
。这不会发生,因为默认情况下输入流是行缓冲的,所以Scanner
在按Enter键之前不会看到任何输入要逐行读取输入,不需要
Scanner
;只需将System.in
包装在BufferedReader
中,并使用其readLine()
方法