socket中如何正确使用BufferedOutputStream,BufferedInputStream
在网络传输中我们不希望一个一个字节去传输数据。因此通常需要用输出缓冲来提高效率。大家看看我的这个设计合不合理,谢谢!!!!
大致结构:向服务发送不定数量的消息(有可能是几十条也有可能十几百条),每条消息的长度不一样,最大的差距在2000个字节左右。首先,我取出这些消息的最长的长度,用这个长度定义了BufferedOutputStream,每写一次,调用一次flush方法。程序如下,由于相关的东西较多,所以我只取了其中一段:
MessageContent:存放消息内容的类
messagelist:vector 消息列表
int maxmessagelength=0;
for(int i=0;i<messagelist.size();i++)
{
message = (MessageContent)messagelist.get(i);
if (message.getMessagelength()>maxmessagelength)
{
maxmessagelength = message.getMessagelength();
}
}
BufferedOutputStream bufferout= new BufferedOutputStream(client.getOutputStream(),maxmessagelength+4);
in = new DataInputStream(client.getInputStream());
out = new DataOutputStream(bufferout);
//发送数据
for(int i=0;i<messagelist.size();i++)
{
message = (MessageContent)messagelist.get(i);
out.writeInt(SEND_CONTINUE);//代表还有消息发送
message.sendMessage(out);
out.flush();
}
out.writeInt(SEND_END);//指发送完毕
我不知道这样做有没有问题,大家指教