[英]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()方法可以正常工作
似乎这里有两个问题,第一个与写作有关,第二个与阅读有关:
该代码创建具有自动行刷新的PrintWriter
。 使用println
,新行将导致写入器刷新。 当使用write
而不换行,在PrintWriter
不冲水(你可以打电话out.flush
后out.write
给力的冲洗Writer
)。
假定接收端正在使用Scanner.readLine()
,则它期望有新行,或者将等待直到收到新行。 println
自动将新行添加到String的末尾,必须使用write
显式发送新行out.write(line + "\\n");
是的,我之前绝对见过。 如果您使用的是具有自动刷新功能的PrintWriter或其他Writer,则无需调用flush()。 但是,否则,要发送消息,必须调用flush()来获取Writer / OutputStream中的内容以发送。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.