Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确地将新行写入不同的流_Java - Fatal编程技术网

Java 如何正确地将新行写入不同的流

Java 如何正确地将新行写入不同的流,java,Java,我有一个OutputStream的集合(一些是socket.getOutputStream,一些是FileOutputStream——只要它仍然可以输出到socket和文件,并且可以在同一个集合中,这些都是可以更改的 在写入行时,我写入-foreach outputStream: line = "\n" + line + "\n"; out.write(line.getBytes(StandardCharsets.UTF_8)); out.flush(); 文件看起来很好,但套接字流(通过t

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

在写入行时,我写入-foreach outputStream:

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

out.write(line.getBytes(StandardCharsets.UTF_8));
out.flush();
文件看起来很好,但套接字流(通过telnet一次打开多个流)最终看起来是这样的(示例中有2个套接字):

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

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


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

问题不在于写入流的内容,而在于读取器如何解释。例如,在Linux上,换行符
\n
被解释为“转到下一行的开头”。在Windows/DOS上,它仅被解释为“转到下一行”。您还需要
\r
(回车符)字符,指示要转到行的开头

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


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

您的套接字可能需要一个不同的换行符。一个系统窗口和另一个系统窗口是否有任何其他内容?另外,可能会有帮助。Windows cmd和Windows中的常规文件可能您的套接字需要一个不同的换行符。一个系统窗口和另一个系统窗口是否有任何其他内容?另外,可能会有帮助。Windows cmd和Reg顺便说一句,
System.lineSeparator()
可能在这里派上用场。或者
System.getProperty(“line.separator”);
顺便说一句,
System.lineSeparator()
可能在这里派上用场。或者
System.getProperty(“line.separator”);