为什么PrintStream(OutputStream os).println()可以自动刷新

一起玩编程 2010-03-17 10:12:11

BufferedReader brkeyb = null;
ServerSocket ss = null;
Socket sock = null;
OutputStream os = null;
try {
ss = new ServerSocket(9999);
System.out.println("服务器启动");
sock = ss.accept();
os = sock.getOutputStream();

PrintStream ps = new PrintStream(os);
brkeyb = new BufferedReader(new InputStreamReader(System.in));

while (flag) {
//从键盘读取信息发往客户端
String sk = brkeyb.readLine();
ps.println("Server: " + sk); //@1@ 不加ps.flush()也能把消息发往客户端
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
br.close();
sock.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}

提问:@1@ 处我不加ps.flush()也能把消息发往客户端,但是public PrintStream(OutputStream os)创建的是不带自动刷新的流,怎么能自动刷新呢?
...全文
264 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaola1314 2011-08-10
  • 打赏
  • 举报
回复
PrintStream是个什么东西啊,见过但不知道是什么意思
「已注销」 2010-03-17
  • 打赏
  • 举报
回复
PrintStream
当写入回车换行时,自动flush
ChDw 2010-03-17
  • 打赏
  • 举报
回复
PrintWriter需要flush是因为Writer本身就存在write之后并没有马上写入OutputStream的问题
bayougeng 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 muxiaoshan 的回复:]

楼主:我是想弄明白为什么创建不带自动刷新的PrintStream不调用flush也能把数据写入文件或socket,而PrintWriter必须调用flush才能把数据写入文件或socket
[/Quote]

你举个这样的例子出来看看,大家才好分析嘛。
hjh811 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chdw 的回复:]
虽然你调用的是不会自动flush的Stream,但是PrintStream实际上写入的已经是sock.getOutputStream(),所有的输出都已经直接写入该流了。已经会发送到服务器上


如果你再增加一层BufferedOutputStream—— new PrintStream(new BufferedOutputStream(os));

则会出现不同的结果,但是要注意Buf……
[/Quote]是的。。。
http://www.khgl.cn/html/78/n-522578.html 看看这个
得出结果是:只有加了BufferedOutputStream才能谈刷不刷新的问题
一起玩编程 2010-03-17
  • 打赏
  • 举报
回复
楼主:我是想弄明白为什么创建不带自动刷新的PrintStream不调用flush也能把数据写入文件或socket,而PrintWriter必须调用flush才能把数据写入文件或socket
ChDw 2010-03-17
  • 打赏
  • 举报
回复
虽然你调用的是不会自动flush的Stream,但是PrintStream实际上写入的已经是sock.getOutputStream(),所有的输出都已经直接写入该流了。已经会发送到服务器上


如果你再增加一层BufferedOutputStream—— new PrintStream(new BufferedOutputStream(os));

则会出现不同的结果,但是要注意BufferedOutputStream仍然会在Buffer满的时候发送数据的,只是时间不确定罢了。


autoFlush是保证调用了print方法之后一定会flush而已。
bayougeng 2010-03-17
  • 打赏
  • 举报
回复
这个流不是缓冲流,应该不用flush吧?
xiesisi3 2010-03-17
  • 打赏
  • 举报
回复
你想做什么?想自动刷新是什么意思?刷新什么?将什么内容刷新?刷新的目的是什么?要达到什么样的效果?
owen_008 2010-03-17
  • 打赏
  • 举报
回复
给楼主顶一个~~~~~~~~~~~~哈哈

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧