为了账号安全,请及时绑定邮箱和手机立即绑定

java为什么flush( )方法不能输出数据,一定要close( )才行?

java为什么flush( )方法不能输出数据,一定要close( )才行?

一只斗牛犬 2019-05-03 09:15:30
服务端:ServerSocket ss=new ServerSocket(40006);while(true){Socket s=ss.accept();OutputStream os=s.getOutputStream();os.write("北京".getBytes());os.flush();//这里改成os.close( ),客户端就能读到,这是为什么啊?}客户端:try {Socket s=new Socket("192.168.0.110",40006);InputStream ins=s.getInputStream();BufferedReader br=new BufferedReader(new InputStreamReader(ins));String line;while((line=br.readLine())!=null){System.out.println(line);}
查看完整描述

6 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

知道了,BufferedReader是根据“\n”或者“\r”来判断一行的,而这里的服务端根本就没有输入这两个符号,也许close()方法会自动给它加上吧。如果服务端手动给它加上这两个符号中的一个,就可以读出来了。


查看完整回答
反对 回复 2019-05-06
?
郎朗坤

TA贡献1921条经验 获得超9个赞

flush是输出到缓冲区,缓冲区没满的话不发送,close的动作会强制把缓冲区里没发送的东西发送出去


查看完整回答
反对 回复 2019-05-06
?
暮色呼如

TA贡献1853条经验 获得超9个赞

close连套接字都关闭了,当然出来了,flush只是清理缓冲区。而且你这个用了缓冲流也没建立缓冲啊


查看完整回答
反对 回复 2019-05-06
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

OutputStream 这个类的flush()方法不执行任何代码,需要其他的输出流去重写这个方法的


查看完整回答
反对 回复 2019-05-06
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

客户端的readline是阻塞的,只有读到尾部才会返回null,你在服务器端不调用close,socket没有关闭,那么客户端的readline就一直阻塞在那(也没有读到一行),所以没有输出


查看完整回答
反对 回复 2019-05-06
  • 6 回答
  • 0 关注
  • 1426 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号