2012-03-16 2 views
2

В настоящее время я изучаю сериализацию объектов в Java, и, насколько я понимаю, даже сериализуется объект, реализующий интерфейс Serializable, и передает его через сокет в другую программу.Запрос на сериализацию объекта

class Mammal implements Serializable 
{ 
    int legs = 4; 

} 

public class ObjectSerial 
{ 



    public static void main(String[] args) 
    { 
     try 
     { 
      FileOutputStream fo = new FileOutputStream("mammal.obj"); 
      ObjectOutputStream oo = new ObjectOutputStream(fo); 

      Mammal m = new Mammal(); 
      oo.writeObject(m); 
      oo.close(); 
     } 
     catch(IOException e){} 

     //read object 
     try 
     { 
      FileInputStream fi = new FileInputStream("mammal.obj"); 
      ObjectInputStream oo = new ObjectInputStream(fi); 

      Mammal m = (Mammal)oo.readObject(); 
      System.out.println(m.legs); 
     } 
     catch(IOException e){} 
     catch(ClassNotFoundException cnf){}//this exception must also be caught 
    } 
} 

озадачивает меня, когда я хочу, чтобы получить член класса на стороне сервера, например, как бы я достичь; Сериализованный объект.

try 
    { 
     FileInputStream fi = new FileInputStream("mammal.obj"); 
     ObjectInputStream oo = new ObjectInputStream(fi); 

     Mammal m = (Mammal)oo.readObject(); 
     System.out.println(m.legs); 
    } 
    catch(IOException e){} 
    catch(ClassNotFoundException cnf){}//t 

Иными словами. В другой программе компилятор скажет мне, что символ не может быть найден.

Надеюсь, что этот вопрос звучит не очень невежественно. Просто для подтверждения ... как мне получить доступ к переменным Serializedobject в другой программе.

С уважением

ответ

3

когда вы десериализацией ваш «mammal.obj» на сервере, вам нужно будет иметь Mammal.class на пути к классам. А также любые объекты Млекопитающие зависят также от пути к классам. Это единственный способ и недостаток сериализации. Его пары ваш клиент и сервер в двоичном порядке.

0

Надеюсь, этот сайт поможет вам немного: http://www.javapractices.com/topic/TopicAction.do?Id=45

Я был немного неправильно на не в состоянии бросить его к исходному объекту, но вы должны иметь метод readObject воссоздать объект, который реализующий сериализованная должен у вас есть силы, которые вы должны сделать для вас, Mamual Object.

1

Кроме того, не забудьте добавить:

// Better to let the compiler generate this at first 
private static final long serialVersionUID = -1111111L; 

И убедитесь, что он получает меняется каждый раз при изменении определения данных в объекте (т.е. добавить/удалить/изменить определение без переходных полеев) ,

Когда записаны сериализованные объекты, serialVersionUID является частью написанного. Когда он считывается, он принимает этот serialVersionUID и сравнивает его с serialVersionUID для этого класса в ClassLoader.

Если эти два не совпадают, это означает, что сериализованный объект был сгенерирован из другой версии класса, чем в настоящее время загружен, и будет создано исключение.

Смежные вопросы