我在Java上使用Socket编程学习本教程(dateserver):
http://cs.lmu.edu/~ray/notes/javanetexamples/
这是我不明白的代码:
try {
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
out.println(new Date().toString());
}
PrintWriter在这做什么?为什么我们需要将参数设置为' true?'我想首先我们为套接字启用outputstream(通过使其成为true
),然后使用out.println
我们发送日期作为输出流,我的假设是正确的吗?
答案 0 :(得分:2)
PrintWriter
在这做什么?为什么我们需要将参数设置为'true?'我想首先我们为套接字启用outputstream(通过使其成为真),然后使用out.println我们将日期作为输出流发送,我的假设是正确的吗?
你的假设是错误的。请阅读以下内容。
new PrintWriter(socket.getOutputStream(), true);
PrintWriter的JavaDoc声明:
从现有
PrintWriter
创建新的OutputStream
。这个便利构造函数创建了必要的中间OutputStreamWriter
,它将使用默认的字符编码将字符转换为字节。
此处PrintWriter
流连接到客户端/服务器的输出流,这意味着print writer写入的任何数据都将发送到客户端/服务器。
此处true
表示在调用新行方法(例如println()
)后,自动刷新来自输出缓冲区的数据,在字符串中找到printf()
或format()
或任何换行符('\ n')。在这种情况下,您无需手动调用flush()
方法。
答案 1 :(得分:1)
从Javadocs,PrintWriter
类"将对象的格式化表示打印到文本输出流"。在这种情况下,它将日期打印到连接到套接字的输出流。
true
意味着对out.println(new Date().toString())
的后续调用将自动刷新输出流的缓冲区,这意味着它将强制将字符串写入流中,而不是将字符串存储在临时缓冲区。
答案 2 :(得分:0)
创建PrintWriter对象以写入OutputStream对象,true用于刷新流,在此处检查API中的构造函数: http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html