Java PrintWriter与BufferedWriter
我正在尝试将字符串从服务器传输到客户端,我正在尝试找到一个解释,为什么当我在服务器中使用Java PrintWriter与BufferedWriter,java,sockets,printwriter,bufferedwriter,Java,Sockets,Printwriter,Bufferedwriter,我正在尝试将字符串从服务器传输到客户端,我正在尝试找到一个解释,为什么当我在服务器中使用PrintWriter时,客户端接收字符串,而当我使用BufferedWriter时,客户端不接收字符串 在我的客户中,我有以下读者/作者: out=new PrintWriter(s.getOutputStream()); in=new BufferedReader(new InputStreamReader(s.getInputStream())); 在我的主要任务中,我将通过下一个调用从服务器接收数据
PrintWriter
时,客户端接收字符串,而当我使用BufferedWriter
时,客户端不接收字符串
在我的客户中,我有以下读者/作者:
out=new PrintWriter(s.getOutputStream());
in=new BufferedReader(new InputStreamReader(s.getInputStream()));
在我的主要任务中,我将通过下一个调用从服务器接收数据:
String sol=in.readLine();
在我的服务器中,我在下一次调用时发送数据(os是我在函数中得到的输出流):
而当我使用BufferedWriter
时,它不会向客户端发送数据(或者客户端无法接收数据?)
在我的服务器端,Bufferwriter不会将“\n”添加到字符串的末尾,而在我的客户端,我正在尝试使用inputstream读取一行。Printwriter会添加“\n”“在方法println中。感谢@EdwinDalorzo的帮助。对于缓冲写入程序,您必须使用write方法,对于打印写入程序,也必须使用write方法。从您的代码片段中可以看出相同的结果,但您的读者希望看到“行”,因此我假设您的打印写入程序可能会在发送的数据中添加回车符,而缓冲区没有。但是,这不能从代码中断言。值得一试!因为您使用的是
PrintWriter.println()
,它发送一个行终止符,而BufferedWriter.write()
,它不发送,并且您使用的是readLine()
,它会一直阻塞,直到收到行终止符、流结束或发生异常为止。
PrintWriter out= new PrintWriter(os);
out.write("test");
out.flush();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os));
out.append("test"); // tried also using out.write
out.flush();