对不起,刚才理解错你的用意了,如果将ScoketChannel定义为transient类型,存储是可以,但是取出来是一个null值,代码如下:Map<Integer, User> m = new HashMap<Integer, User>(); User user = new User(); user.setUserId(userId); user.setChannel(channel); m.put(userId , user); System.out.println(user.getChannel()); MemCacheUtils.set("usrKey", m); m = (HashMap<Integer, User>) MemCacheUtils.get("usrKey"); user = m.get(userId); System.out.println("---------------"); System.out.println(user.getChannel());输出结果: java.nio.channels.SocketChannel[connected local=/192.168.1.121:7521 remote=/192.168.1.121:50541] --------------- null
key可以用ip地址之类的,value就保存SocketChannel
说的对。每个线程对象都以IP地址或者其它的用户名什么的为key存其来
强制转型,会出现类转换错误的
对缓存连接信息建立对象Cache(含有key),ScoketChannel,Map(含有key)常驻内存。和2楼想法一致。
通过key关联Cache和ScoketChannel。
具体是这样的:
User 对象中有 userId 和 SocketChannel 对象,
我需要把userId做为key, User对象作为value, 然后封装到Map中,最后存储到缓存服务器上。
由于ScoketChannel没有序列化,目前不知道如何实现,或者是否还有其他方式?目前我是把Map对象存储在内存中的。
User user = new User();
user.setUserId(userId);
user.setChannel(channel);
m.put(userId , user);
System.out.println(user.getChannel());
MemCacheUtils.set("usrKey", m);
m = (HashMap<Integer, User>) MemCacheUtils.get("usrKey");
user = m.get(userId);
System.out.println("---------------");
System.out.println(user.getChannel());输出结果:
java.nio.channels.SocketChannel[connected local=/192.168.1.121:7521 remote=/192.168.1.121:50541]
---------------
null
这个思路走不通了。
原因就是 16楼 所说的。