Java實現對象的序列化


什么是對象的序列化?

序列化:把對象轉化成字節序列的過程就是對象的序列化;反序列化:把字節序列轉化成對象的過程就是對象的反序列化。單看概念比較抽象,但是看代碼就會明白。

對象序列化的用途

1、Java程序在運行中,對象都是分配在內存中,而序列化的一個用途就是將內存的中對象轉化成磁盤中的對象。

2、對象不能直接在網絡中傳輸,有時候需要將對象轉成字節序列在網絡中傳輸,這就是對象序列化的第二個用途。

如何實現對象的序列化?

1、新建一個實體對象,實現Serializable接口,這個實體對象就可以進行序列化了

package test.entity;

import java.io.Serializable;

/**
 * 實體類,用於序列化
 * 
 * @author YaoQi
 * @date 2017年6月24日
 */
public class Person implements Serializable {

    /**
     * 序列化ID
     */
    private static final long serialVersionUID = -3245478690496182643L;
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

 

2、在另一個類中序列化這個實體類,並且將序列化之后的字節序列存在磁盤上。

package test.serializable;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
import test.entity.Person;

/**
 * java實現對象的序列化
 * 
 * @author YaoQi
 * @date 2017年6月24日
 */
public class SerializableDemo {
    public static void main(String[] args) throws Exception {
        
        //序列化一個對象
        ObjectOutputStream objOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\obj.txt"));
        Person person = new Person();
        person.setName("Tom");
        person.setAge(24);
        
        //寫入字面值常量
        objOutputStream.writeObject("將對象序列化");
        //寫入匿名對象
        objOutputStream.writeObject(new Date());
        //寫入對象
        objOutputStream.writeObject(person);
        
        //反序列化一個對象
        ObjectInputStream objInputStream = new ObjectInputStream(new FileInputStream("D:\\obj.txt"));
        System.out.println("讀取的字面值常量:"+(String)objInputStream.readObject());
        System.out.println("讀取的匿名對象"+(Date)objInputStream.readObject());
        System.out.println("讀取person對象"+((Person)objInputStream.readObject()).toString());
    }
}

執行之后控制台結果如下:

讀取的字面值常量:將對象序列化
讀取的匿名對象Sat Jun 24 22:42:22 CST 2017
讀取person對象Person [name=Tom, age=24]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM