大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 IO流之序列化流與反序列化流

IO流之序列化流與反序列化流

更新時間:2020-11-18 17:14:44 來源:動力節點 瀏覽1117次

在正式介紹 IO流中的序列化流與反序列化流之前,我們先來看看何謂序列化和反序列化:

序列化:用一個字節序列可以表示一個對象,該字節序列包含該對象的數據、對象的類型和對象中存儲的屬性等信息。字節序列寫出到文件之后,相當于文件中持久保存了一個對象的信息。


反序列化:該字節序列還可以從文件中讀取回來,重構對象,對它進行反序列化。對象的數據、對象的類型和對象中存儲的數據信息,都可以用來在內存中創建對象。

用于從流中讀取對象的操作流 ObjectInputStream 稱為 反序列化流

用于向流中寫入對象的操作流 ObjectOutputStream 稱為 序列化流

用于操作對象。可以將對象寫入到文件中,也可以從文件中讀取對象。


一、在序列化概念的基礎之上我們再來看對象序列化流ObjectOutputStream:

ObjectOutputStream將Java 對象的基本數據類型和圖形寫入 OutputStream。可以使用 ObjectInputStream 讀取(重構)對象。通過在流中使用文件可以實現對象的持久存儲。

需要注意的是對象序列化流只能將支持 java.io.Serializable 接口的對象寫入流中。

java.io.ObjectOutputStream extends OutputStream

ObjectOutputStream:對象的序列化流

作用:

把對象以流的方式寫入到文件中保存


構造方法:

ObjectOutputStream(OutputStream out) 創建寫入指定 OutputStream 的 ObjectOutputStream。


參數:

OutputStream out:字節輸出流

特有的成員方法:

void writeObject(Object obj) 將指定的對象寫入 ObjectOutputStream。


使用步驟:

1.創建ObjectOutputStream對象,構造方法中傳遞字節輸出流

2.使用ObjectOutputStream對象中的方法writeObject,把對象寫入到文件中

3.釋放資源

代碼演示:

public class ObjectStreamDemo {

public static void main(String[] args) throws IOException, ClassNotFoundException {

/*

* 將一個對象存儲到持久化(硬盤)的設備上。

*/

writeObj();//對象的序列化。

}

public static void writeObj() throws IOException {

//1,明確存儲對象的文件。

FileOutputStream fos = new FileOutputStream("tempfile\\obj.object");

//2,給操作文件對象加入寫入對象功能。

ObjectOutputStream oos = new ObjectOutputStream(fos);

//3,調用了寫入對象的方法。

oos.writeObject(new Person("wangcai",20));

//關閉資源。

oos.close();

}

}


Person類

public class Person implements Serializable {

private String name;

private int age;

public Person() {

super();

}

public Person(String name, int age) {

super();

this.name = name;

this.age = 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 + "]";

}

}


二、同理,我們再來看對象反序列化流ObjectInputStream

ObjectInputStream 對以前使用 ObjectOutputStream 寫入的基本數據和對象進行反序列化。支持 java.io.Serializable接口的對象才能從流讀取。

java.io.ObjectInputStream extends InputStream

ObjectInputStream:對象的反序列化流

作用:

把文件中保存的對象,以流的方式讀取出來使用


構造方法:

ObjectInputStream(InputStream in) 創建從指定 InputStream 讀取的 ObjectInputStream。


參數:

InputStream in:字節輸入流


特有的成員方法:

Object readObject() 從 ObjectInputStream 讀取對象。


使用步驟:

1.創建ObjectInputStream對象,構造方法中傳遞字節輸入流

2.使用ObjectInputStream對象中的方法readObject讀取保存對象的文件

3.釋放資源

4.使用讀取出來的對象(打印)


readObject方法聲明拋出了ClassNotFoundException(class文件找不到異常)

當不存在對象的class文件時拋出此異常

反序列化的前提:

1.類必須實現Serializable

2.必須存在類對應的class文件

代碼演示:

public class ObjectStreamDemo {

public static void main(String[] args) throws IOException, ClassNotFoundException {

readObj();//對象的反序列化。

}

public static void readObj() throws IOException, ClassNotFoundException {

//1,定義流對象關聯存儲了對象文件。

FileInputStream fis = new FileInputStream("tempfile\\obj.object");

//2,建立用于讀取對象的功能對象。

ObjectInputStream ois = new ObjectInputStream(fis);

Person obj = (Person)ois.readObject();

System.out.println(obj.toString());

}

}


本文我們只是對IO流中的對象反序列化流和對象序列化流做了初步的了解,了解了對象反序列化流和對象序列化流的基本概念和簡單的用法。IO流作為Java學習中的一個大的版塊,我們只是初窺門徑,想要學好IO流我們任重而道遠。觀看本站的Java 基礎教程,為你的學習之路更進一步!


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产一区二区三区精品久久呦 | 色综久久| 国产精品99久久久久久www | 米奇777第四久久久99 | 国产100页 | 日本大臿亚洲香蕉大片 | 狠狠久久亚洲欧美专区 | 久久伊人一区二区三区四区 | 亚洲欧美在线中文字幕不卡 | 天天狠操 | 国产精品一区二区欧美视频 | 99久久精品免费看国产免费 | 国产亚洲欧美在线视频 | 欧美一级网 | 欧美精品亚洲精品日韩专区 | 色视频一区二区三区 | 亚洲国产美女精品久久久久 | 女人a级毛片 | 热久久视久久精品18国产 | 国产大学生一级毛片绿象 | 色八戒国产一区二区三区四区 | 7777奇米影视 | 成年女人在线观看 | 国产短视频精品区第一页 | 99re热久久精品这里都是精品 | 色 在线播放 | 精品午夜寂寞影院在线观看 | 国产亚洲精品一区999 | 亚州在线播放 | 精品国产区一区二区三区在线观看 | 亚洲欧美日韩国产综合专区 | 亚洲天堂三区 | 孕妇xxxxxx孕交xxx | 欧美国产永久免费看片 | 日韩精品视频美在线精品视频 | 国产目拍亚洲精品一区麻豆 | 久久精品国产一区二区三区不卡 | 亚洲色妞 | 成人精品国产亚洲欧洲 | 久久99精品久久只有精品 | 天天拍天天干天天操 |