Сериализация класса, который не реализует Сериализуемый - PullRequest
0 голосов
/ 24 января 2012

У меня есть 2 класса serial1 и serial 2. serial1 реализует Serializable, тогда как serial2 нет. Согласно теории, я должен получить исключение для следующего кода, но он работает нормально.почему так?

import java.io.*;

public class SerialTest {

    public static void main(String args[]){
        FileOutputStream fos=null;
        ObjectOutputStream oos =null;
        serial1 se = new serial1();
        serial1 sd = null;
        se.mets();
        try {
             fos= new FileOutputStream("serialtest");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            oos =new ObjectOutputStream(fos);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            oos.writeObject(se);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        FileInputStream fis=null;
        ObjectInputStream ois = null;

        try {
            fis = new FileInputStream("serialtest");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            ois = new ObjectInputStream(fis);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            sd = (serial1) ois.readObject();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        sd.mets();

    }

}


import java.io.Serializable;

public class serial1 implements Serializable{

    /* public static void main(String []args){      
         serial1 ss = new serial1();
         ss.mets();
     }*/

     public void mets(){
         serial2 s2  = new serial2();
         System.out.println( "serial 1 + mets");
         s2.met1();
     }
}


public class serial2 {

    public void met1(){
        System.out.println("serial2  + met1");
    }

}

--------------------------- * Вывод

серийный номер 1 + метс

серийный номер 2 + мет1

серийный номер 1 + метс

серийный номер 2 + мет1

Ответы [ 2 ]

3 голосов
/ 24 января 2012

Вы на самом деле не сериализуете serial2.Ваш метод mets создает локальную переменную, но как только метод возвращается, он выходит из области видимости и становится пригодным для сборки мусора.

Если у вас была переменная экземпляра типа serial2 внутри serial1, тогдавы увидите исключение при попытке сериализации (при условии, что это ненулевое значение), но локальная переменная не будет проблемой.

3 голосов
/ 24 января 2012

Я не вижу, чтобы вы когда-либо сериализовали serial2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...