PrintWriter在以下以pw代替,在写client与server进行测试的通讯程序时,用pw.println(str)可以把数据发送给客户端,而pw.write(str)却不行!
查看源码发现:
pw.println(str)方法是由write方法与println()方法组成,页println()方法中执行了newLine()方法。
而 newLine()实现中有一条out.write(lineSeparator);
即println(str)方法比write方法中多输出了一个lineSeparator字符;
其中lineSeparator实现为;lineSeparator = (String) java.security.AccessController.doPrivileged(new sun.security.action.GetPropertyAction("line.separator"));
而line.separator属性跟据每个系统又是不一样的。
println()方法的注释说明中提到:
/**
* Terminates the current line by writing the line separator string. The
* line separator string is defined by the system property
* <code>line.separator</code>, and is not necessarily a single newline
* character (<code>'\n'</code>).
*/
在我机器上测试,默认的lineSeparator输出的十六进制为13 10即\r\n
这样write方法修改为:write(str+"\r\n")即达到了与println(str)一样的效果了。
查看源码发现:
pw.println(str)方法是由write方法与println()方法组成,页println()方法中执行了newLine()方法。
而 newLine()实现中有一条out.write(lineSeparator);
即println(str)方法比write方法中多输出了一个lineSeparator字符;
其中lineSeparator实现为;lineSeparator = (String) java.security.AccessController.doPrivileged(new sun.security.action.GetPropertyAction("line.separator"));
而line.separator属性跟据每个系统又是不一样的。
println()方法的注释说明中提到:
/**
* Terminates the current line by writing the line separator string. The
* line separator string is defined by the system property
* <code>line.separator</code>, and is not necessarily a single newline
* character (<code>'\n'</code>).
*/
在我机器上测试,默认的lineSeparator输出的十六进制为13 10即\r\n
这样write方法修改为:write(str+"\r\n")即达到了与println(str)一样的效果了。