Java序列化、反序列化
目錄
1:什么是序列化、反序列化?
2:序列化的用途?
3:序列化的n種方式
1:什么是序列化、反序列化?
- 把對(duì)象轉(zhuǎn)換為字節(jié)序列的過程稱為對(duì)象的序列化
- 把字節(jié)序列轉(zhuǎn)換為對(duì)象的過程中稱為對(duì)象的反序列化
2:序列化的用途?
- 把對(duì)象的字節(jié)序列持久化到磁盤,通常會(huì)放到文件中;
- 在網(wǎng)絡(luò)上傳輸對(duì)象的字節(jié)序列;
??在很多應(yīng)用中,需要對(duì)某些對(duì)象進(jìn)行序列化,讓它們離開內(nèi)存空間,入住物理硬盤,以便長(zhǎng)期保存。比如最常見的是Web服務(wù)器中的Session對(duì)象,當(dāng)有 10萬用戶并發(fā)訪問,就有可能出現(xiàn)10萬個(gè)Session對(duì)象,內(nèi)存可能吃不消,于是Web容器就會(huì)把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對(duì)象還原到內(nèi)存中。
??當(dāng)兩個(gè)進(jìn)程在進(jìn)行遠(yuǎn)程通信時(shí),彼此可以發(fā)送各種類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會(huì)以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳送。發(fā)送方需要把這個(gè)Java對(duì)象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)絡(luò)上傳送;接收方則需要把字節(jié)序列再恢復(fù)為Java對(duì)象。
3:序列化的n種方式
3.1 Java的IO庫(kù)
??java.io.ObjectOutputStream代表對(duì)象輸出流,它的writeObject(Object obj)可以把參數(shù)obj對(duì)象序列化到當(dāng)前輸出流中。
??java.io.ObjectInputStream代表對(duì)象輸入流,它的readObject()方法從一個(gè)輸入流中讀取字節(jié)序列,并將其反序列化為對(duì)象返回。
??只有實(shí)現(xiàn)了Serializable和Externalizable接口的類的對(duì)象才能被序列化。??Externalizable接口繼承自 Serializable接口,實(shí)現(xiàn)Externalizable接口的類完全由自身來控制序列化的行為,而僅實(shí)現(xiàn)Serializable接口的類可以 采用默認(rèn)的序列化方式 。
代碼如下(Java bean統(tǒng)一為Person,后續(xù)不再單獨(dú)列出):
3.2 使用Json序列化工具
FastJson、ProtoBuf、Jackson等序列化工具都可以,以fastjson為例
Person man = new Person("obob",18,"M");//序列化String json = JSONObject.toJSONString(man);System.out.println(json);//反序列化System.out.println(JSONObject.parseObject(json, Person.class));總結(jié)
以上是生活随笔為你收集整理的Java序列化、反序列化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java ASM与Javassit
- 下一篇: java美元兑换,(Java实现) 美元