这样写有什么错嘛 ?ObjectOutputStream的多次new
m.setMessageType(ONLINE_PACKET);// 通知在线用户有新用户上线了;
for (int i = 0; i < v.size(); ++i) {
System.out.println("在线用户包");
ObjectOutputStream oos = new ObjectOutputStream(v.get(i).s.getOutputStream());
//ObjectInputStream ois =new ObjectInputStream(v.get(i).s.getInputStream());
oos.writeObject(m);
oos.flush();
}
这段代码大概意思是:我发送一个消息包messagePacket,告诉每一个在线用户(存在Vector)中,某人上线了,因为要发送给每一个用户,所以用了循环,可是不知道多次new ObjectOutputStream会不会有什么问题,请赐教!还有我用了ObjectOutputStream 是不是一定要用ObjectInputStream ,且一一对应啊,并且还要有用,就是new 出来还得又用上的时候,才不会报错?网上好多多是这样说的。。。。。请大伙们“评评理”呵呵
[最优解释]
没有问题。。
每个用户必须需要对应一个ObjectOutputStream,不然不能向它发消息啊。因为每个客户端用户的socket都不一样,对应的OutputStream和InputStream都不一样。没有必要复用一个ObjectOutputStream,而且也没有办法进行复用。像1L说的,有GC收集垃圾对象。
对于ObjectInputStream,如果服务器端Socket不需要读取客户端Socket发送的消息的话,就不需要。并不是说ObjectInputStream和ObjectOutputStream必须成对出现
[其他解释]
多次new应该不会有问题的~~~
Java垃圾自动回收。。。。当然多次new 每一次循环之后,前面循环new的那个还在内存里面,但是引用已经指向了最新的这个,前面的就成了垃圾碎片了。。。。我认为不会出问题,是因为Java会自动垃圾回收。。不知对不对呢?
[其他解释]
public UserGroup(Socket s , String id , String name){//初始化用户的Socket,id,name
this.socket = s;
this.id = id ;
this.name = name ;
System.out.println("new 一个用户到用户组");
try {//6 行 为什么会等在这里呢
this.ois = new ObjectInputStream(s.getInputStream());
this.oos = new ObjectOutputStream(s.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("new 一个用户,并初始化成功");
}