国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

小白學(xué)做網(wǎng)站買什么書優(yōu)化網(wǎng)站排名工具

小白學(xué)做網(wǎng)站買什么書,優(yōu)化網(wǎng)站排名工具,中國建設(shè)銀行網(wǎng)站個(gè)人客戶首頁,網(wǎng)站開發(fā)流程 圖書一.概念 Serialization(序列化)是一種將對象以一連串的字節(jié)描述的過程;反序列化deserialization是一種將這些字節(jié)重建成一個(gè)對象的過程。將程序中的對象,放入文件中保存就是序列化,將文件中的字節(jié)碼重新轉(zhuǎn)成對象就是反…

一.概念

Serialization(序列化)是一種將對象以一連串的字節(jié)描述的過程;反序列化deserialization是一種將這些字節(jié)重建成一個(gè)對象的過程。將程序中的對象,放入文件中保存就是序列化,將文件中的字節(jié)碼重新轉(zhuǎn)成對象就是反序列化

二.要求

只有實(shí)現(xiàn)了Serializable或Externalizable接口的類的對象才能被序列化,并且序列化對象的所有屬性都需是可序列化的。

三.實(shí)現(xiàn)

serializable接口

1.1方法

序列化:創(chuàng)建一個(gè)ObjectOutputStream輸出流,調(diào)用 ObjectOutputStream 對象的 writeObject() 輸出可序列化對象

? ?反序列化:創(chuàng)建一個(gè)ObjectInputStream輸出流,調(diào)用 ObjectInputStream 對象的 readObject()得到反序列化的對象

1.2代碼

import java.io.*;
import java.lang.reflect.Method;class User implements Serializable{private String name;private int age;@Overridepublic String toString(){return "User{" + "name=" +name + ", age="+age+"}";}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}
}
public class Main {public static void main(String[] args) throws Exception {ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("E:\\tao.txt"));//創(chuàng)建一個(gè)ObjectOutputStream流,將序列化對象輸出到tao.txtUser user=new User();user.setName("tao");user.setAge(20);//實(shí)例化Userout.writeObject(user);ObjectInputStream in=new ObjectInputStream(new FileInputStream("E:\\tao.txt"));// 創(chuàng)建一個(gè) ObjectOutputStream 輸出流User tao=(User)in.readObject();//將readObject反序列化的結(jié)果轉(zhuǎn)化成User類,實(shí)例成taoSystem.out.println(tao);}
}

User{name=tao, age=20}

1.3注意

①如果實(shí)現(xiàn) Serializable 接口的類有父類,則父類也必須可以序列化,若父類沒有實(shí)現(xiàn)序列化接口,則父類必須有無參構(gòu)造函數(shù),否則會拋異常 java.io.InvalidClassException。因?yàn)樵诟割悰]有實(shí)現(xiàn) Serializable 接口時(shí),虛擬機(jī)是不會序列化父對象的,而一個(gè) Java 對象的構(gòu)造必須先有父對象,才有子對象,反序列化也不例外。所以反序列化時(shí),為了構(gòu)造父對象,只能調(diào)用父類的無參構(gòu)造函數(shù)作為默認(rèn)的父對象。因此當(dāng)我們?nèi)「笇ο蟮淖兞恐禃r(shí),它的值是調(diào)用父類無參構(gòu)造函數(shù)后的值。如果沒有在父類無參構(gòu)造函數(shù)中對父類變量進(jìn)行初始化的話,父類變量值都是默認(rèn)聲明的值,如 int 型的默認(rèn)是 0,string 型的默認(rèn)是 null。

②序列化不保存靜態(tài)變量,因?yàn)樾蛄谢4娴氖菍ο蟮臓顟B(tài)而不是類的狀態(tài),靜態(tài)變量是類的狀態(tài)

③ 使用transient 關(guān)鍵字可以選擇不需要序列化的字段

如:

private transient String name;
private transient int age;

進(jìn)行序列化的時(shí)候,name和age都不會被保存

Externalizable接口

2.1注意

①Externalizable接口繼承Serializable 接口

②writeExternal()和readExternal()對應(yīng)writeObject()和readObject()兩個(gè)方法

③Externalizable序列化沒有屬性限制,靜態(tài)變量以及transient 關(guān)鍵字修飾的屬性都能被序列化

④必須提供public的無參構(gòu)造方法,因?yàn)樵诜葱蛄谢瘜?shí)現(xiàn) Externalizabale 接口的類的時(shí)需要通過反射創(chuàng)建對象。如果沒有無參數(shù)的構(gòu)造方法,在運(yùn)行時(shí)會拋出異常:java.io.InvalidClassException

2.2代碼

import java.io.*;
import java.lang.reflect.Method;class User implements Externalizable{private String name;private int age;public User(){}//加上public無參構(gòu)造器@Overridepublic String toString(){return "User{" + "name=" +name + ", age="+age+"}";}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}@Override//重寫writeExternal()方法public void writeExternal(ObjectOutput out) throws IOException{out.writeObject(name);}@Override//重寫wreadExternal()方法public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException{name=(String)in.readObject();}}
public class Main {public static void main(String[] args) throws Exception {ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("E:\\tao.txt"));//創(chuàng)建一個(gè)ObjectOutputStream流,將序列化對象輸出到tao.txtUser user=new User();user.setName("tao");user.setAge(20);//實(shí)例化Userout.writeObject(user);ObjectInputStream in=new ObjectInputStream(new FileInputStream("E:\\tao.txt"));// 創(chuàng)建一個(gè) ObjectOutputStream 輸出流User tao=(User)in.readObject();//將readObject反序列化的結(jié)果轉(zhuǎn)化成User類,實(shí)例成taoSystem.out.println(tao);}
}

result

User{name=tao, age=0}

age變成了0

因?yàn)槭褂肊xternalizable接口,需要重寫writeExternal() 與 readExternal() 方法,我只寫了name的實(shí)現(xiàn),沒有寫age,int型默認(rèn)值為0

四.安全

java反序列化會自動觸發(fā)readObject()方法,類似于php反序列化的__destruct()函數(shù)

java支持自定義writeObject()和readObject()方法

如果某個(gè)類中自定義了readObject()方法,當(dāng)對其的一個(gè)實(shí)例化對象進(jìn)行反序列化,就會調(diào)用readObject()方法

import java.io.*;
import java.lang.reflect.Method;class User implements Serializable{private String name;private int age;@Overridepublic String toString(){return "User{" + "name=" +name + ", age="+age+"}";}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}private void readObject(ObjectInputStream in){System.out.println("這是新的readObject!");}
}
public class Main {public static void main(String[] args) throws Exception {ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("E:\\tao.txt"));//創(chuàng)建一個(gè)ObjectOutputStream流,將序列化對象輸出到tao.txtUser user=new User();user.setName("tao");user.setAge(20);//實(shí)例化Userout.writeObject(user);ObjectInputStream in=new ObjectInputStream(new FileInputStream("E:\\tao.txt"));// 創(chuàng)建一個(gè) ObjectOutputStream 輸出流User tao=(User)in.readObject();//將readObject反序列化的結(jié)果轉(zhuǎn)化成User類,實(shí)例成taoSystem.out.println(tao);}
}

結(jié)果

這是新的readObject!
User{name=null, age=0}

可見在反序列化的時(shí)候?qū)崿F(xiàn)了新的readObject()

那么就可以命令執(zhí)行了

 private void readObject(ObjectInputStream in) throws IOException{Runtime.getRuntime().exec("calc");}

彈計(jì)算器了!

這里初步了解java序列化與反序列話,后續(xù)構(gòu)造鏈會繼續(xù)學(xué)習(xí)。

參考博客

java基礎(chǔ)知識點(diǎn)2:序列化與反序列化詳解_java序列化和反序列化-CSDN博客

javasec/2.java序列化與反序列化.md at master · Maskhe/javasec (github.com)

http://m.aloenet.com.cn/news/28119.html

相關(guān)文章:

  • wordpress查看網(wǎng)站內(nèi)容站長工具服務(wù)器查詢
  • wordpress 操作數(shù)據(jù)庫大連seo顧問
  • 唐山企業(yè)網(wǎng)站建設(shè)濟(jì)南百度
  • 云主機(jī) 做網(wǎng)站鏈接交換公司
  • 上海網(wǎng)站搜索排名婚戀網(wǎng)站排名前三
  • 做外貿(mào)網(wǎng)站好的公司志鴻優(yōu)化設(shè)計(jì)答案網(wǎng)
  • 網(wǎng)站產(chǎn)品詳情用哪個(gè)軟件做的sem競價(jià)培訓(xùn)班
  • 德國 網(wǎng)站建設(shè)百度指數(shù)查詢?nèi)肟?/a>
  • 網(wǎng)站做百度推廣需要什么材料百度號碼認(rèn)證平臺官網(wǎng)
  • 域名過期了怎么辦怎么找回網(wǎng)站企業(yè)門戶網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)
  • 建網(wǎng)站方案自媒體推廣渠道
  • 微信微網(wǎng)站平臺百度優(yōu)化怎么做
  • 做網(wǎng)站需要什么樣的電腦配置太原網(wǎng)站優(yōu)化公司
  • 織夢仿非織夢網(wǎng)站資源搜索引擎搜索神器網(wǎng)
  • 彩票真人網(wǎng)站建設(shè)有什么功能
  • 找別人做網(wǎng)站的注意事項(xiàng)電商網(wǎng)站設(shè)計(jì)
  • 做網(wǎng)站底色怎么選微信公眾號運(yùn)營
  • 深圳網(wǎng)站設(shè)計(jì)公司哪家便宜廣西seo關(guān)鍵詞怎么優(yōu)化
  • 成都網(wǎng)站建設(shè)愛特通品牌推廣渠道有哪些
  • 網(wǎng)站自動答題腳本怎么做在線網(wǎng)頁制作網(wǎng)站
  • 富陽區(qū)建設(shè)局網(wǎng)站直通車怎么開效果最佳
  • 美橙建站五站合一軟件互聯(lián)網(wǎng)精準(zhǔn)營銷
  • 本地化吃喝玩樂平臺網(wǎng)站可以做嗎武漢seo診斷
  • 網(wǎng)站建設(shè)勞務(wù)協(xié)議seo推廣seo技術(shù)培訓(xùn)
  • 哪些網(wǎng)站可以做問卷調(diào)查賺錢如何檢測網(wǎng)站是否安全
  • 做網(wǎng)站除了域名還需要什么免費(fèi)廣告發(fā)布平臺
  • 邯鄲網(wǎng)站建設(shè)哪家好windows優(yōu)化大師怎么使用
  • php做網(wǎng)站中下一步按鈕中國職業(yè)培訓(xùn)在線平臺
  • 做網(wǎng)店在素材網(wǎng)站找的圖侵權(quán)嗎地域名網(wǎng)址查詢
  • 水印在線制作網(wǎng)站百度識圖搜索