黑马程序员技术交流社区
标题:
有关flush()和close()问题,请大神们解惑
[打印本页]
作者:
逸俊逍全
时间:
2013-12-21 17:46
标题:
有关flush()和close()问题,请大神们解惑
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?
作者:
taoge
时间:
2013-12-21 18:23
write是往文件里写,改变了原来的文件,当然要flush()以显示最新的文件,read没有改变原文件,不必flush
作者:
想你的夜
时间:
2013-12-22 00:19
1.write里面是写入缓存,改变了原来的数据,只有刷新了,之后对其操作才能同步,就像你在银行存钱了,系统需要更新数据。而你去银行查看余额存款之后数据没有改变,也就不需要flush();
2.flush()作用是flush方法是用来清除缓存的,数据缓存不是输出流的属性变量,是你自己定义的一个字节数组。输入流把数据写入这个字节数组,输出流再把字节数组里的数据写出去,输入流输出流本身并不拥有这个字节数组(也就是数据缓存),所以不需要flush();。
作者:
卖火柴
时间:
2013-12-22 09:39
关键是看原来的文件是否已经是改变了,改变了的话就用flush()。没有改变的话就不用的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2