java系列19:對象流

將對象寫入到流,這個過程叫做序列化。
反之,稱為反序列化。

如果要用于網絡中傳輸?shù)臄?shù)據(jù),則這些數(shù)據(jù)必須要實現(xiàn)序列化。

例1:

// Student.java

package test;

public class Student {
    String name;
    int age;
    String sex;

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public void study() {
        System.out.println("我在認真學習");
    }

    @Override
    public String toString() {
        return "我的名字:" + name + ",我的年齡:"
                + age + ",我的性別:" + sex;
    }
}

// Test.java

package test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class Test {
    public static void main(String[] args) {
        Student stu = new Student("李行之", 25, "男");
        File file = new File("a.txt");
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
            oos.writeObject(stu);
            oos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
運行結果,未進行序列化,因此無法將對象寫入流中。13行:oos.writeObject(stu);

例2:

// 1. Student.java

package test;

import java.io.Serializable;

/*
 *  implements Serializable:實現(xiàn)序列化接口。
 *  它沒有任何方法需要實現(xiàn),只是一個標識。
 *  序列化之后,會有一個編號植入到對象中;當寫入到磁盤時,會將編號一起寫入磁盤。
 */
public class Student implements Serializable{
    String name;
    int age;
    String sex;
    // transient:不序列化某些屬性
    transient long money = 10000000;

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public void study() {
        System.out.println("我在認真學習");
    }

    @Override
    public String toString() {
        return "我的名字:" + name + ",我的年齡:" 
                + age + ",我的性別:" + sex + ",我的錢:" + money;
    }
}

// 2. Test.java

package test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
 * 序列化
 * @author xiangdonglee
 *
 */
public class Test {
    public static void main(String[] args) {
        Student stu = new Student("李行之", 25, "男");
        File file = new File("a.txt");
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
            oos.writeObject(stu);
            oos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
序列化結果
// 3.Test1.java

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 * 反序列化
 * @author xiangdonglee
 *
 */
public class Test1 {
    public static void main(String[] args) {
        File file = new File("a.txt");
        if(file.exists()) {
            try {
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
                Student stu = (Student) ois.readObject();
                System.out.println(stu);
                ois.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
transient修飾的money屬性沒有被序列化
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 4,011評論 0 11
  • 面向對象主要針對面向過程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,220評論 0 4
  • 跑操回來補了覺,打掃宿舍衛(wèi)生。下午就直接去開黑了,今天居然也沒輸。。。晚上回來又在宿舍觀戰(zhàn),相當丑陋的比賽,pat...
    AJI米閱讀 176評論 0 0
  • 今天繼續(xù)分享【得到】App付費專欄李笑來的《通往財富自由之路》,第十六周內容——《看得見別人的好才能獲得新生》。 ...
    注冊營養(yǎng)師阿娟閱讀 1,157評論 4 7

友情鏈接更多精彩內容