JAVA对象序列与反序列化

一般我们把对应特征写入文件叫序列化,把文件动态变成对象叫反序列化。序列化为文件是常用做法。

能够序列化的类必须实现java.io.Serializable接口,一个类对象是否可以序列化只要查看此类是否实现java.io.Serializable即可判断。

如果有的属性不需要序列化,则可用transient标记。

序列华思路:

 1.用FileOutputStream关联对应的文件

 2.ObjectOutputStream关联1中的流对象

 3.用2中的对象流writeObject写入对象数据

 4.关闭对象流和文件流

反序列化思路:

1.用FileInputStream关联对应的文件

2.用ObjectInputStream关联1中的流

3.用2中的对应流readObject获对象(强类型转换)

 4.关闭对象流和文件流

import java.io.*;
 final class Employee implements Serializable
{
    public String  nameString;
    public String Address;
    public transient int SSN;
    public int number;
    public void mailCheck() {
        System.out.println("Mailing a check to " + nameString
                + " " + Address);
    
    }
    
}
public class mytest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*序列化*/
     Employee employee=new Employee();
     employee.Address="北京復興大街一號";
     employee.nameString="新華書店";
     employee.SSN=1234;
     employee.number=86943;
     try {
        FileOutputStream os=new FileOutputStream("d:\ser.ser");
        ObjectOutputStream oos=new ObjectOutputStream(os);
        oos.writeObject(employee);
        oos.close();
        os.close();
        System.out.println("Serialized data is saved in d:\ser.ser");
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    
    
        /*反序列化    */
        Employee em;
        try {
            FileInputStream fs=new FileInputStream("d:\ser.ser");
            ObjectInputStream ois=new ObjectInputStream(fs);
            em=(Employee)ois.readObject();
           ois.close();
           fs.close();
           System.out.println("Deserialized Employee...");
              System.out.println("Name: " + em.nameString);
              System.out.println("Address: " + em.Address);
              System.out.println("SSN: " + em.SSN);
              System.out.println("Number: " + em.number);
        } catch (IOException e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
        
    }

}
原文地址:https://www.cnblogs.com/yagzh2000/p/12887419.html