1. 程式人生 > >ObjectInputStream || ObjectOutputStream 序列化對象輸入輸出流Demo 學習

ObjectInputStream || ObjectOutputStream 序列化對象輸入輸出流Demo 學習

圖形 new 顯示 獲取 || 數組 所有 make 聲明

A:Api 說明:

ObjectOutputStream 寫入的基本數據和對象 *(內存 到 硬盤 對象的 存儲!!)

ObjectInputStream 對以前使用 ObjectOutputStream 寫入的基本數據和對象進行反序列化。

ObjectOutputStream 和 ObjectInputStream 分別與 FileOutputStream 和 FileInputStream 一起使用時,可以為應用程序提供對對象圖形的持久存儲。ObjectInputStream 用於恢復那些以前序列化的對象。其他用途包括使用套接字流在主機之間傳遞對象,或者用於編組和解組遠程通信系統中的實參和形參。

ObjectInputStream 確保從流創建的圖形中所有對象的類型與 Java 虛擬機中顯示的類相匹配。使用標準機制按需加載類。

只有支持 java.io.Serializable 或 java.io.Externalizable 接口的對象才能從流讀取。

readObject 方法用於從流讀取對象。應該使用 Java 的安全強制轉換來獲取所需的類型。在 Java 中,字符串和數組都是對象,所以在序列化期間將其視為對象。讀取時,需要將其強制轉換為期望的類型。

可以使用 DataInput 上的適當方法從流讀取基本數據類型。

默認情況下,對象的反序列化機制會將每個字段的內容恢復為寫入時它所具有的值和類型。反序列化進程將忽略聲明為瞬態或靜態的字段。對其他對象的引用使得根據需要從流中讀取這些對象。使用引用共享機制能夠正確地恢復對象的圖形。反序列化時始終分配新對象,這樣可以避免現有對象被重寫。

讀取對象類似於運行新對象的構造方法。為對象分配內存並將其初始化為零 (NULL)。為不可序列化類調用無參數構造方法,然後從以最接近 java.lang.object 的可序列化類開始和以對象的最特定類結束的流恢復可序列化類的字段。

B:Demo 學習和測試


代碼復制粘貼直接可以運行(異常處理不要太在意(全部拋異常) 理解知識點即可....嘿嘿)

代碼結構

技術分享

Apptest.java

package ankermaker.top.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import ankermaker.top.entity.Student;
public class Apptest {
    
/** * 序列化 存儲 * @throws Exception * @throws Exception * ObjectInputStream 實際上 在 FileInputStream基礎 創建的 */ public static void readObjext() throws Exception, Exception { ObjectInputStream read=new ObjectInputStream(new FileInputStream("c://student.o")); Student s1=(Student) read.readObject(); Student s2=(Student) read.readObject(); read.close(); System.out.println(s1+"####"+s2 ); } public static void writeObject() throws FileNotFoundException, IOException { ObjectOutputStream write=new ObjectOutputStream(new FileOutputStream("c://student.o"));//序列化 存儲 對象 write.writeObject(new Student(22,"hy")); write.writeObject(new Student(12,"gr")); write.close(); } public static void main(String[] args) throws Exception, Exception { readObjext();//反序列化 獲取 對象 數據 // writeObject();//後面測試 對象的 的獲取 時候 註釋掉 應為 已經 從內存 中 將 對象保存的 相應的 硬盤中了 } }

Student.java

package ankermaker.top.entity;

import java.io.Serializable;

/**
 * 對象 輸出流 測試 
 * @author Administrator
 * Serializable  序列化 接口
 */
public class Student  implements Serializable{
     
    private static final long serialVersionUID = -3349982764047612364L;
    private int age;
    private String name;
    
    public Student(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [age=" + age + ", name=" + name + "]";
    }

}

測試結果

WriteObject()測試技術分享

readObject()測試

技術分享

--------------------------------------------------【謝謝查看學習,本人不才,只能多學多積累,歡迎大牛指點】---------------------------------------------------------------

ObjectInputStream || ObjectOutputStream 序列化對象輸入輸出流Demo 學習