一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 詳解Java中對象序列化與反序列化

詳解Java中對象序列化與反序列化

2020-04-06 11:14lijiao JAVA教程

這篇文章主要為大家詳細(xì)介紹了Java中對象序列化與反序列化,感興趣的小伙伴們可以參考一下

        序列化 (Serialization)是將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程。一般將一個對象存儲至一個儲存媒介,例如檔案或是記億體緩沖等。在網(wǎng)絡(luò)傳輸過程中,可以是字節(jié)或是XML等格式。而字節(jié)的或XML編碼格式可以還原完全相等的對象。這個相反的過程又稱為反序列化
Java對象的序列化與反序列化
  在Java中,我們可以通過多種方式來創(chuàng)建對象,并且只要對象沒有被回收我們都可以復(fù)用該對象。但是,我們創(chuàng)建出來的這些Java對象都是存在于JVM的堆內(nèi)存中的。只有JVM處于運行狀態(tài)的時候,這些對象才可能存在。一旦JVM停止運行,這些對象的狀態(tài)也就隨之而丟失了。
  但是在真實的應(yīng)用場景中,我們需要將這些對象持久化下來,并且能夠在需要的時候把對象重新讀取出來。Java的對象序列化可以幫助我們實現(xiàn)該功能。
  對象序列化機制(object serialization)是Java語言內(nèi)建的一種對象持久化方式,通過對象序列化,可以把對象的狀態(tài)保存為字節(jié)數(shù)組,并且可以在有需要的時候?qū)⑦@個字節(jié)數(shù)組通過反序列化的方式再轉(zhuǎn)換成對象。對象序列化可以很容易的在JVM中的活動對象和字節(jié)數(shù)組(流)之間進行轉(zhuǎn)換。
  在Java中,對象的序列化與反序列化被廣泛應(yīng)用到RMI(遠(yuǎn)程方法調(diào)用)及網(wǎng)絡(luò)傳輸中。
  相關(guān)接口及類
  Java為了方便開發(fā)人員將Java對象進行序列化及反序列化提供了一套方便的API來支持。其中包括以下接口和類:

  •          java.io.Serializable
  •   java.io.Externalizable
  •   ObjectOutput
  •   ObjectInput
  •   ObjectOutputStream
  •   ObjectInputStream
  •   Serializable 接口

  類通過實現(xiàn) java.io.Serializable 接口以啟用其序列化功能。未實現(xiàn)此接口的類將無法使其任何狀態(tài)序列化或反序列化。可序列化類的所有子類型本身都是可序列化的。序列化接口沒有方法或字段,僅用于標(biāo)識可序列化的語義。 (該接口并沒有方法和字段,為什么只有實現(xiàn)了該接口的類的對象才能被序列化呢?)
  當(dāng)試圖對一個對象進行序列化的時候,如果遇到不支持 Serializable 接口的對象。在此情況下,將拋出NotSerializableException。
  如果要序列化的類有父類,要想同時將在父類中定義過的變量持久化下來,那么父類也應(yīng)該集成java.io.Serializable接口。
  下面是一個實現(xiàn)了java.io.Serializable接口的類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.hollischaung.serialization.SerializableDemos;
import java.io.Serializable;
/**
* Created by hollis on 16/2/17.
* 實現(xiàn)Serializable接口
*/
public class User1 implements Serializable {
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 "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

通過下面的代碼進行序列化及反序列化

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.hollischaung.serialization.SerializableDemos;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.*;
/**
* Created by hollis on 16/2/17.
* SerializableDemo1 結(jié)合SerializableDemo2說明 一個類要想被序列化必須實現(xiàn)Serializable接口
*/
public class SerializableDemo1 {
public static void main(String[] args) {
//Initializes The Object
User1 user = new User1();
user.setName("hollis");
user.setAge(23);
System.out.println(user);
//Write Obj to File
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("tempFile"));
oos.writeObject(user);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(oos);
}
//Read Obj from File
File file = new File("tempFile");
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(file));
User1 newUser = (User1) ois.readObject();
System.out.println(newUser);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(ois);
try {
FileUtils.forceDelete(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//OutPut:
//User{name='hollis', age=23}
//User{name='hollis', age=23}

以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)Java中對象序列化與反序列化有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本视频在线免费播放 | 精品欧美一区二区精品久久 | 色综合天天综合 | 欧美国产在线观看 | 翁熄性放纵交换01 | 日本久久免费大片 | 99热精品久久 | 日韩成人在线网站 | 欧美腐剧mm在线观看 | 草草精品视频 | 小莹的性荡生活45章 | 欧亚尺码专线欧洲s码wmy | 亚洲国产成人久久99精品 | www毛片| 操老妇| 青青青国产在线 | 无码人妻丰满熟妇啪啪网不卡 | 80日本xxxxxxxxx| 免费369看片入口 | 国产精品九九免费视频 | 俄罗斯图书馆无打码久久 | 精品视频一区在线观看 | 疯狂刺激的3p国产在线 | 欧美a一片xxxx片与善交 | 骚虎网站在线观看 | 成人国产在线播放 | 青青草99热这里都是精品 | 免费看一级a一片毛片 | 干露露视频 性感写真 | 亚洲AV永久无码精品老司机蜜桃 | 接吻吃胸摸下面啪啪教程 | 91啪在线观看国产在线 | 国产午夜视频在线观看网站 | 久久99亚洲热最新地址获取 | sss视频在线精品 | 亚洲无限观看 | 变态np虐高h | 亚洲国产无线码在线观看 | 1313午夜精品理伦片 | 日本午夜大片免费观看视频 | 亚洲欧美日韩综合在线播放 |