代码之家  ›  专栏  ›  技术社区  ›  mehmetozer

处理Memcache时出现不可序列化对象错误

  •  8
  • mehmetozer  · 技术社区  · 15 年前

    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
    

    我设法通过将用户类转换为字符串来修复它,但是± 不想使用toString方法。我只想使用我的类来添加和获取mMethods。我怎样才能解决这个问题? 这是我正在使用的代码。

    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();
        }
    
    
        }
    
    3 回复  |  直到 15 年前
        1
  •  13
  •   Niels van der Rest    15 年前

    Serializable 让Java处理序列化,或者 Externalizable

        2
  •  3
  •   Riduidel    15 年前

    由于问题修改而更新。

    因此,用户类必须实现 Serializable . 希望这和写作一样简单

     public class User implements Serializable {
     ...
     }
    

        3
  •  0
  •   Rajeev Rathor    12 年前

    出现这个问题的原因是,由于模式冲突,JVM无法正确序列化对象。在我的例子中,一些类的串行版本ID被定义为默认的1L。这些班级相互联合。我指定了一些独特的自定义值。我的问题解决了。