小弟最近在做一个C/S结构的企业即时通小项目
在里面,服务器端要记录上线用户的Socket,并即时的把在线用户列表更新给每个用户
我是用HashMap存放的,但是在用ObjectOutputStream传送的时候,竟然说HashMap不能序列化
小弟不懂,可是查了API,上面的HashMap已经实现那个接口了啊
求救各位高手
先谢过了
在里面,服务器端要记录上线用户的Socket,并即时的把在线用户列表更新给每个用户
我是用HashMap存放的,但是在用ObjectOutputStream传送的时候,竟然说HashMap不能序列化
小弟不懂,可是查了API,上面的HashMap已经实现那个接口了啊
求救各位高手
先谢过了
/**
* 将格式化数据,录入到map中
*
* @param info
* 数据字符串
* @param map
* 目标map
*/
public final static void load(String info, Map<String, String> map) {
try {
int keysLength = info.indexOf('#');
int index = 0;
String key;
int dLength = keysLength + 1;
int size;
String value = null;
for (int i = 0; i < keysLength; i++) {
if (':' == info.charAt(i)) {
size = Integer.valueOf(info.substring(index, i));
index = i + 1;
value = info.substring(dLength, dLength + size);
dLength += size;
}
if (',' == info.charAt(i)) {
key = info.substring(index, i);
index = i + 1;
map.put(key, "null".equals(value) ? null : value);
}
}
key = info.substring(index, keysLength);
map.put(key, "null".equals(value) ? null : value);
} catch (RuntimeException e) {
System.err.print("StringMap load error:");
System.err.println(e.getMessage());
}
} /**
* 将map表的数据,输出为字符串
*
* @param map
* 源map
* @return
*/
public final static String store(Map<String, String> map) {
StringBuffer keys = new StringBuffer();
StringBuffer data = new StringBuffer();
for (Entry<String, String> e : map.entrySet()) {
keys.append(null != e.getValue() ? e.getValue().length() : 4)
.append(':').append(e.getKey()).append(',');
data.append(null == e.getValue() ? "null" : e.getValue());
}
keys.delete(keys.length() - 1, keys.length());
return keys.toString() + "#" + data.toString();
}