java - 未实现 Serialized 的类的序列化

标签 java serializable

我有2个类serial1和serial 2。serial1实现了Serialized,而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 + met1

系列 1 + 梅兹

序列2 + met1

最佳答案

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

如果您在 serial1 中有一个类型为 serial2 的实例变量,那么当您尝试序列化时您会看到异常(假设它是非空值),但是局部变量不会成为问题。

关于java - 未实现 Serialized 的类的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8981888/

相关文章:

android - 从 Activity 传递时获取对象为 null

java - 将递归转换为迭代

java - 跟踪运行时拖动事件的进度。 JavaFX

java - 我的 ShaderProgram 不工作

Java Socket 类转换异常

c# - 如何序列化未标记为可序列化的类

java - 如何使用 JPA 或 JPQL 从没有主键列的实体中获取记录

java - org.jdesktop.swingbinding.JTableBinding$BindingTableModel 无法转换为 javax.swing.table.DefaultTableModel

java - ObjectInputStream 不读取多次

c# - 和事件(特别是 INotifyPropertyChanged)