关于流flush()与close()问题
import java.net.*;
import java.io.*;
public class TClient{
public static void main(String [] args)throws Exception{
Socket s=new Socket("127.0.0.1",6666);
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(6666);
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流就不用flush()?
OutputStream out为什么不用关呢?
[解决办法]
write的flush,是想要不关闭write流的情况下,将已写入缓存的内容发出去。read只是读操作,没有flush。
out不关,是因为out来自socket,socket关了,就不用再关一次out了
[解决办法]
我个人揣测
write会有flush这个方法,是因为写内存与 写磁盘/网络 在速度上有个等级差距,所以一般会先写到缓存中,再写入低速设备。
而read,是从低速中读,一次读取一大块内容提高性能倒是有,不过对于网络,似乎数据还没到之前想读也读不到,还不如读一点处理一点相对好一些吧。。。。
[解决办法]
这帖子 不错,http://blog.csdn.net/veryitman/article/details/6460726
[解决办法]