Несериализуемая объектная ошибка при работе над Кэш-памятью

Привет все, я работал с кэш-памятью, и когда я скомпилировал этот код, я получил следующие ошибки.

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, но ı не хотят использовать 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();
    }


    }
9
задан mehmetozer 9 July 2010 в 08:00
поделиться

2 ответа

Memcache не знает, как сериализовать ваши объекты. Вам нужно будет реализовать Serializable , чтобы Java обрабатывала сериализацию, или Externalizable , если вам нужен больший контроль над процессом (де) сериализации.

13
ответ дан 4 December 2019 в 12:59
поделиться

Обновлено в связи с изменением вопроса.

Итак, ваш класс User должен реализовывать Serializable. Надеюсь, это так же просто, как написать

 public class User implements Serializable {
 ...
 }

так как Serializable не содержит никакого метода.

3
ответ дан 4 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: