【问题标题】:how to write new line to different streams properly如何正确地将新行写入不同的流
【发布时间】:2020-04-03 04:55:31
【问题描述】:

我有一个 OutputStream 的集合(有些是 socket.getOutputStream,有些是 FileOutputStream - 只要它仍然可以输出到套接字和文件,并且可以在同一个集合中,这些都是可以更改的。

写一行的时候,我写——foreach outputStream:

line = "\n" + line + "\n";

out.write(line.getBytes(StandardCharsets.UTF_8));
out.flush();

文件看起来不错,但套接字流(通过 telnet 一次打开多个流)最终看起来像这样(示例有 2 个套接字):

【问题讨论】:

  • 您的套接字可能需要一个不同的换行符。有没有可能是一个系统 Windows 而另一个 anything 其他?另外,this可能有帮助。
  • Windows cmd 和 Windows 中的常规文件

标签: java


【解决方案1】:

问题不在于您向流中写入了什么,而在于读者如何解释这一点。例如,在 Linux 上,换行符 \n 被解释为“转到下一行的 开头”。在 Windows/DOS 上,它仅被解释为“转到下一行”。您还需要在此处使用\r(回车)字符来指示您要转到行首。

即使在同一个系统上,不同的程序也可能对事物做出不同的解释。例如,一些文本编辑器有开关来指示是使用 Windows 还是 Unix 样式的换行符。

因此,根据读取流的代码,您可能无法获得一致的行为。除非您让所有读者都同意“转到下一行的开头”使用哪些字符。

【讨论】:

  • 顺便说一句,System.lineSeparator() 在这里可能会派上用场。或System.getProperty("line.separator");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2017-03-13
  • 2019-01-22
相关资源
最近更新 更多