日期:2014-05-20  浏览次数:20800 次

关于流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
------解决方案--------------------
引用:
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为什么不用关呢?

这说明楼主对IO流还没有真正的领悟到其中的精髓,read流有好几种,用不用flush(),取决于你使用的什么read流,建立楼主看看这个  http://blog.csdn.net/dabing69221/article/details/16996877
还有关于IO流的东西 http://blog.csdn.net/dabing69221/article/details/17055503
------解决方案--------------------
大哥啊!一个是读取,读取的时候你文件里的内容会变化吗?? 显然是不会的,如果你写入的话,你的文本就会改变了,所以你就要用刷新了。