黑马程序员技术交流社区

标题: PrintStream的参数autoFlush问题 求指点 [打印本页]

作者: 草貌路飞    时间: 2013-7-18 11:44
标题: PrintStream的参数autoFlush问题 求指点
  1. import java.net.*;
  2. import java.io.*;
  3. class UpperCaseClient
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 Socket s = new Socket(InetAddress.getLocalHost(), 10000);
  8.                 //定义源,读取键盘数据的流对象
  9.                 BufferedReader bufR =
  10.                                 new BufferedReader(new InputStreamReader(System.in));
  11.                
  12.                 //定义目的,将数据写入到socket输出流,发给服务端。
  13.                 //BufferedWriter bufOut =
  14.                 //                new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  15.                 PrintStream out = new PrintStream(s.getOutputStream());
  16.                
  17.                 //定义一个socket读取流,读取服务端返回的大写信息
  18.                 BufferedReader bufIn =
  19.                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  20.                 String line = null;
  21.                 String str = null;
  22.                 while((line = bufR.readLine()) != null)
  23.                 {
  24.                         //当客户端输入over时,循环结束,就会调用s.close()关闭客户端socket,这时服务端也会关闭,因为当关闭客户
  25.                         //端的socket时,会发送一个-1过去给服务端,服务端读到-1时循环也结束了,所以会执行s.close()和ss.close()
  26.                         if("over".equals(line))
  27.                                 break;
  28.                        
  29.                         //用到了缓冲流,write后数据是写到缓冲中,应该把数据flush出去
  30.                         //.bufOut.write(line);
  31.                         //bufOut.newLine();//要加一个换行,不然服务端用readLine方法会一直等待结束标记
  32.                         //bufOut.flush();//要把数据刷出去,不然服务端读不到数据
  33.                         out.println(line);
  34.                        
  35.                         //读服务端的返回大写信息
  36.                         //readLine()是阻塞方法,它要等到一个回车标记才会结束。
  37.                         //用缓冲流写过来的时候,要加一个换行。newLine();而且要flush缓冲区,不然接收不到数据
  38.                         str = bufIn.readLine();
  39.                         System.out.println(str);
  40.                 }
  41.                 bufR.close();
  42.                 s.close();
  43.                
  44.                
  45.         }
  46. }

  47. /*
  48. * 服务端
  49. * 源:socket读取流
  50. * 目的:socekt输出流
  51. * 都是文本,装饰
  52. */
  53. class UpperCaseServer
  54. {
  55.         public static void main(String[] args) throws Exception
  56.         {
  57.                 ServerSocket ss = new ServerSocket(10000);
  58.                
  59.                 Socket s = ss.accept();
  60.                 String ip = s.getInetAddress().getHostAddress();
  61.                 System.out.println(ip + "....connect");
  62.                 //源,读取socket读取流中的数据
  63.                 BufferedReader bufIn =
  64.                                 new BufferedReader(new InputStreamReader(s.getInputStream()));
  65.                
  66.                 //目的,socket输出流,将大写数据写入到socket输出流,并发送给客户端
  67.                 //BufferedWriter bufOut =
  68.                 //                new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  69.                 PrintStream out = new PrintStream(s.getOutputStream());
  70.                
  71.                 String line = null;
  72.                 //readLine()是阻塞方法,它要等到一个回车标记才会结束。
  73.                 //用缓冲流写过来的时候,要加一个换行。newLine();而且要flush缓冲区,不然接收不到数据
  74.                 while((line = bufIn.readLine()) != null)
  75.                 {
  76.                         //bufOut.write(line.toUpperCase());
  77.                         //bufOut.newLine();//要加一个换行,不然客户端用readLine方法会一直等待结束标记
  78.                         //bufOut.flush();//要把数据刷出去,不然客户端读不到数据
  79.                         out.println(line.toUpperCase());
  80.                 }
  81.                 s.close();
  82.                 ss.close();
  83.         }
  84. }
复制代码
问题,不是说PrintStream要设置成自动刷新,也就是new PrintStream(***, true)这种形式才会自动刷新吗,为什么没有设置还是能自动刷呢

作者: 许庭洲    时间: 2013-8-2 06:35
值得学习ing!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2