黑马程序员技术交流社区
标题:
PrintStream的参数autoFlush问题 求指点
[打印本页]
作者:
草貌路飞
时间:
2013-7-18 11:44
标题:
PrintStream的参数autoFlush问题 求指点
import java.net.*;
import java.io.*;
class UpperCaseClient
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket(InetAddress.getLocalHost(), 10000);
//定义源,读取键盘数据的流对象
BufferedReader bufR =
new BufferedReader(new InputStreamReader(System.in));
//定义目的,将数据写入到socket输出流,发给服务端。
//BufferedWriter bufOut =
// new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintStream out = new PrintStream(s.getOutputStream());
//定义一个socket读取流,读取服务端返回的大写信息
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
String str = null;
while((line = bufR.readLine()) != null)
{
//当客户端输入over时,循环结束,就会调用s.close()关闭客户端socket,这时服务端也会关闭,因为当关闭客户
//端的socket时,会发送一个-1过去给服务端,服务端读到-1时循环也结束了,所以会执行s.close()和ss.close()
if("over".equals(line))
break;
//用到了缓冲流,write后数据是写到缓冲中,应该把数据flush出去
//.bufOut.write(line);
//bufOut.newLine();//要加一个换行,不然服务端用readLine方法会一直等待结束标记
//bufOut.flush();//要把数据刷出去,不然服务端读不到数据
out.println(line);
//读服务端的返回大写信息
//readLine()是阻塞方法,它要等到一个回车标记才会结束。
//用缓冲流写过来的时候,要加一个换行。newLine();而且要flush缓冲区,不然接收不到数据
str = bufIn.readLine();
System.out.println(str);
}
bufR.close();
s.close();
}
}
/*
* 服务端
* 源:socket读取流
* 目的:socekt输出流
* 都是文本,装饰
*/
class UpperCaseServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "....connect");
//源,读取socket读取流中的数据
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
//目的,socket输出流,将大写数据写入到socket输出流,并发送给客户端
//BufferedWriter bufOut =
// new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintStream out = new PrintStream(s.getOutputStream());
String line = null;
//readLine()是阻塞方法,它要等到一个回车标记才会结束。
//用缓冲流写过来的时候,要加一个换行。newLine();而且要flush缓冲区,不然接收不到数据
while((line = bufIn.readLine()) != null)
{
//bufOut.write(line.toUpperCase());
//bufOut.newLine();//要加一个换行,不然客户端用readLine方法会一直等待结束标记
//bufOut.flush();//要把数据刷出去,不然客户端读不到数据
out.println(line.toUpperCase());
}
s.close();
ss.close();
}
}
复制代码
问题,不是说PrintStream要设置成自动刷新,也就是new PrintStream(***, true)这种形式才会自动刷新吗,为什么没有设置还是能自动刷呢
作者:
许庭洲
时间:
2013-8-2 06:35
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2