小弟最近在做一个C/S结构的企业即时通小项目
在里面,服务器端要记录上线用户的Socket,并即时的把在线用户列表更新给每个用户
我是用HashMap存放的,但是在用ObjectOutputStream传送的时候,竟然说HashMap不能序列化
小弟不懂,可是查了API,上面的HashMap已经实现那个接口了啊
求救各位高手
先谢过了

解决方案 »

  1.   

    存在HashMap中的对象的类也都实现了Serializable接口了不?
      

  2.   

    我里面存的是String与HashMap的映射啊
      

  3.   

    要序列化 所有对象 包括对象里的对象 都要支持序列化 你查下HashMap里印射的对象吧
      

  4.   

    键值都是String的话,可以这么做
    /**
     * 将格式化数据,录入到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();
    }