java flush没用

来源:百度知道 编辑:UC知道 时间:2024/06/23 17:24:04
有两个语句:player.send("02--");player.send("04--");
本来预期是分两次收到两条消息。可是结果却是一次收到一条包含了两条消息内容的消息。send方法如下:
synchronized public void send(String msg){
PrintWriter writer = null;
try{
writer = new PrintWriter(socket.getOutputStream());
}catch(Exception e){

}if(writer!=null){
writer.println(msg);
writer.flush();
}
}
感觉就是flush方法在偷懒,它等两条消息都写进缓冲区了才发送出去。但是如果在两个send方法之间随便写一个方法,比如System.out.print("break");
那就会分两次发送出去。
在线等高手

和TCP的缓存、滑动窗口有关。

flush是指将缓存数据写入socket,也就是形成TCP数据包发给对方。
当TCP的数据包到达时,接受方有可能会将连续的消息合并,因此,你在客户端读出一个的情况,是可能存在的,尤其是你使用Reader等本身带有部分缓存的情况。
如果采用Stream,可能会避免这种现象。

试试:
writer.println(msg);
writer.flush();
writer.close();