大家好,我正在使用memcache,当我编译这段代码时,我遇到了以下错误。
2010-07-09 10:35:53.499 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2010-07-09 10:35:53.520 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@7fdcde
Exception in thread "main" java.lang.IllegalArgumentException: Non-serializable object
at net.spy.memcached.transcoders.BaseSerializingTranscoder.serialize(BaseSerializingTranscoder.java:86)
at net.spy.memcached.transcoders.SerializingTranscoder.encode(SerializingTranscoder.java:135)
at net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:301)
at net.spy.memcached.MemcachedClient.set(MemcachedClient.java:691)
at def.Tweet.main(Tweet.java:23)
Caused by: java.io.NotSerializableException: def.User
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1173)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:343)
at net.spy.memcached.transcoders.BaseSerializingTranscoder.serialize(BaseSerializingTranscoder.java:81)
... 4 more
我设法通过将User类转换为String来修复它,但我不想使用toString方法。我只想使用我的类来添加和获取mwethods。我该如何解决这个问题? 这是我正在使用的代码。
package def;
import java.io.IOException;
import java.io.Serializable;
import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;
public class Tweet {
private static User user;
private static Message message;
private static Followers follower;
public static void main(String[] args) throws Exception {
try{
user = new User(1,"Mehmet Özer","asd","127.0.0.1","True","Onine");
//String deneme = user.toString();
MemcachedClient c=new MemcachedClient(new InetSocketAddress("localhost", 11211));
// Store a value (async) for one hour
c.set(user.userKey, 3600, user);
System.out.println(c.get(user.userKey));
}
catch(IOException ex) {
ex.printStackTrace();
}
}
}
对不起,我忘记了用户类,我也给你用户类来帮助我。
public class User {
public static String userKey = "UserDB";
public static int userID ;
public static String userName;
public static String password;
public static String ipAddress;
public static String isOnline;
public static String lastActive;
public User(int userID, String userName, String password, String ipAddress,String isOnline,String lastActive)
{
this.userID = userID;
this.userName = userName;
this.password = password;
this.ipAddress = ipAddress;
this.isOnline = isOnline;
this.lastActive = lastActive;
}
@Override
public String toString() {
System.out.println(this.userID);
System.out.println(this.userName);
System.out.println(this.password);
System.out.println(this.ipAddress);
System.out.println(this.isOnline);
System.out.println(this.lastActive);
return super.toString();
}
}
答案 0 :(得分:12)
Memcache不知道如何序列化对象。您需要实现Serializable
以使Java处理序列化,或Externalizable
如果您需要更多控制(反)序列化过程。
答案 1 :(得分:3)
由于问题修改而更新。
因此,您的User类必须实现Serializable。希望这就像写
一样简单 public class User implements Serializable {
...
}
因为Serializable不包含任何方法。
答案 2 :(得分:0)
此问题即将发生,因为由于架构冲突,JVM无法严格序列化对象。在我的例子中,某些类的Serial版本ID默认定义为1L。这些课程是彼此合作的。我分配了一些独特的自定义值。我的问题解决了。