【问题标题】:PrintWriter println(String s) method: \r\n not supported?PrintWriter println(String s) 方法:\r\n 不支持?
【发布时间】:2012-05-28 19:27:45
【问题描述】:

我正在创建一个多线程聊天客户端服务器应用程序。 在服务器连接中,我使用 PrintWriter println(String s) 方法将响应写入客户端。

PrintWriter out;
String msg = in.readLine();
String response = "";
if (msg.startsWith("nick: ") {
    response = protocol.authenticate(msg); //returns a String that says "welcome " + nick
    //if there are messages pending for the author who logged in add them to the response String
         response+="\r\n"+textmsg;
} else { ... }
out.println(response);

当我运行使用 BufferedReader readLine() 方法从服务器读取的客户端时,我收到了欢迎消息,但没有收到客户端的待处理消息,但如果我使用了

response+=textmsg;

它有效,所以我认为这是因为我正在使用 \r\n 但我仍然需要在这两条消息之间打印一个新行。我该怎么办?

编辑接受答案后:最后我选择使用 OutputStream 和 InputStream 这样我就可以发送我想要的各种字符串,即使使用 \r\n。

【问题讨论】:

    标签: java printwriter println


    【解决方案1】:

    对于每行输出调用一次println(所以两次)或仅使用\n,而不使用\r。那是 Java 的标准换行符,\r\n 是特定于 Windows 的行尾序列。当然,在客户端,您现在还必须两次调用readLine。没有办法调用readLine 一次并得到两行。如果您需要自定义分隔符,则必须使用其他分隔符,而不是 \n

    【讨论】:

    • 看起来可行,谢谢。如果我只使用 \n 是否会在每个操作系统中以相同的方式显示新行?
    • 是的,Java 应该处理这个问题。但是,当涉及到无线协议时,编码首先不应该是特定于平台的。它只涉及读/写文件。
    【解决方案2】:

    将 println 与 PrintWriter 一起使用,用于 \n。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      相关资源
      最近更新 更多