繁体   English   中英

没有实现Serializable的类的序列化

[英]Serialization of a class which doesnt implement Serializable

我有2个类serial1和serial2。serial1实现Serializable,而serial2没有。按照理论,我应该为以下代码获取Exception,但工作正常。 为什么会这样呢?

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 + met1

系列1 +遇见

串口2 + met1

我看不到您序列化serial2

您实际上并没有序列化serial2 您的mets方法会创建一个局部变量,但是一旦该方法返回,它就会超出范围并有资格进行垃圾回收。

如果你有类型的实例变量serial2serial1那么你会看到一个例外,当您尝试序列(假设它是一个非空值),但局部变量将不会是一个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM