A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 逸俊逍全 中级黑马   /  2013-12-21 17:46  /  1256 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.net.*;
import java.io.*;
public class TClient{
    public static void main(String [] args)throws Exception{
    Socket s=new Socket("192.168.1.100",10002);
    OutputStream out=s.getOutputStream();
    DataOutputStream write=new DataOutputStream(out);
    write.writeUTF("nihao");
     write.flush();
     write.close();
     s.close();
    }
}
-----------------------------------------------
import java.net.*;
import java.io.*;
public class TServer{
    public static void main(String[]agrs ) throws Exception{
    ServerSocket ss =new ServerSocket(10002);
    while(true){
    Socket s=ss.accept();
    System.out.print("linted");
    DataInputStream read=new DataInputStream(s.getInputStream());
    System.out.print(read.readUTF());
         read.close();
         s.close();
         }
     }
   }
为什么write调用flush()而read没有调用,还有就是OutputStram在这里为什么不需要close?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
write是往文件里写,改变了原来的文件,当然要flush()以显示最新的文件,read没有改变原文件,不必flush
回复 使用道具 举报
1.write里面是写入缓存,改变了原来的数据,只有刷新了,之后对其操作才能同步,就像你在银行存钱了,系统需要更新数据。而你去银行查看余额存款之后数据没有改变,也就不需要flush();
2.flush()作用是flush方法是用来清除缓存的,数据缓存不是输出流的属性变量,是你自己定义的一个字节数组。输入流把数据写入这个字节数组,输出流再把字节数组里的数据写出去,输入流输出流本身并不拥有这个字节数组(也就是数据缓存),所以不需要flush();。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
关键是看原来的文件是否已经是改变了,改变了的话就用flush()。没有改变的话就不用的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马