PrintWriter和OutputStream用于简单的客户端服务器套接字程序

时间:2014-06-08 16:11:09

标签: java sockets

我在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我们发送日期作为输出流,我的假设是正确的吗?

3 个答案:

答案 0 :(得分:2)

  

PrintWriter在这做什么?为什么我们需要将参数设置为'true?'我想首先我们为套接字启用outputstream(通过使其成为真),然后使用out.println我们将日期作为输出流发送,我的假设是正确的吗?

你的假设是错误的。请阅读以下内容。

new PrintWriter(socket.getOutputStream(), true);

PrintWriter的JavaDoc声明:

  

从现有PrintWriter创建新的OutputStream。这个便利构造函数创建了必要的中间OutputStreamWriter,它将使用默认的字符编码将字符转换为字节。

  1. 此处PrintWriter流连接到客户端/服务器的输出流,这意味着print writer写入的任何数据都将发送到客户端/服务器。

  2. 此处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