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

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

小白學(xué)做網(wǎng)站買什么書哪里能搜索引擎優(yōu)化

小白學(xué)做網(wǎng)站買什么書,哪里能搜索引擎優(yōu)化,遼寧建設(shè)廳查詢網(wǎng)站,廣州網(wǎng)站建設(shè)開發(fā)一.概念 Serialization(序列化)是一種將對(duì)象以一連串的字節(jié)描述的過程;反序列化deserialization是一種將這些字節(jié)重建成一個(gè)對(duì)象的過程。將程序中的對(duì)象,放入文件中保存就是序列化,將文件中的字節(jié)碼重新轉(zhuǎn)成對(duì)象就是反…

一.概念

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

二.要求

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

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

serializable接口

1.1方法

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

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

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

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

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

如:

private transient String name;
private transient int age;

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

Externalizable接口

2.1注意

①Externalizable接口繼承Serializable 接口

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

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

④必須提供public的無參構(gòu)造方法,因?yàn)樵诜葱蛄谢瘜?shí)現(xiàn) Externalizabale 接口的類的時(shí)需要通過反射創(chuàng)建對(duì)象。如果沒有無參數(shù)的構(gòu)造方法,在運(yùn)行時(shí)會(huì)拋出異常: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流,將序列化對(duì)象輸出到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反序列化會(huì)自動(dòng)觸發(fā)readObject()方法,類似于php反序列化的__destruct()函數(shù)

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

如果某個(gè)類中自定義了readObject()方法,當(dāng)對(duì)其的一個(gè)實(shí)例化對(duì)象進(jìn)行反序列化,就會(huì)調(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流,將序列化對(duì)象輸出到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)造鏈會(huì)繼續(xù)學(xué)習(xí)。

參考博客

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

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

http://aloenet.com.cn/news/36451.html

相關(guān)文章:

  • 利用html做博客網(wǎng)站做百度推廣多少錢
  • 網(wǎng)站建設(shè)方案書 備案百度排名查詢
  • 網(wǎng)站建設(shè)要考慮哪些企業(yè)如何進(jìn)行網(wǎng)絡(luò)營銷
  • 做圖網(wǎng)站有哪些東西嗎建網(wǎng)站用什么軟件
  • 用java做視頻網(wǎng)站app投放渠道有哪些
  • django做的網(wǎng)站舉例資源網(wǎng)站優(yōu)化排名軟件
  • 跨越速運(yùn)在黑龍江黑河網(wǎng)點(diǎn)網(wǎng)絡(luò)優(yōu)化工程師主要做什么
  • 望牛墩做網(wǎng)站每日軍事新聞
  • 廣西中國建設(shè)銀行網(wǎng)站首頁百度網(wǎng)站收錄提交
  • 做網(wǎng)站指導(dǎo)seo流量工具
  • 菲律賓 做菠菜網(wǎng)站視頻外鏈在線生成
  • jquery 素材的網(wǎng)站seo基本概念
  • 長沙專門做網(wǎng)站建設(shè)的公司2024年1月新冠高峰期
  • 企業(yè)網(wǎng)站建立流程百度站長平臺(tái)鏈接
  • 2345電視劇網(wǎng)站免費(fèi)鄭州seo服務(wù)公司
  • sae wordpress 圖片北京網(wǎng)站優(yōu)化站優(yōu)化
  • 學(xué)做蛋糕網(wǎng)站如何讓自己網(wǎng)站排名提高
  • 針對(duì)網(wǎng)站做搜索引擎做優(yōu)化網(wǎng)盤資源共享網(wǎng)站
  • 微交易網(wǎng)站建設(shè)實(shí)時(shí)積分榜
  • 溫州龍灣做網(wǎng)站2022年最好用的搜索引擎
  • wordpress搜索產(chǎn)品偽靜態(tài)博客seo優(yōu)化技術(shù)
  • 政府門戶網(wǎng)站建設(shè)的意義電腦培訓(xùn)學(xué)校
  • 無錫知名網(wǎng)站制作百度網(wǎng)站打不開
  • 網(wǎng)站設(shè)計(jì)過程中需要注意的問題網(wǎng)站網(wǎng)頁的優(yōu)化方法
  • 網(wǎng)站開發(fā)的作用建站之星
  • 做論壇網(wǎng)站需要什么備案網(wǎng)站友鏈交換平臺(tái)
  • 做網(wǎng)站網(wǎng)絡(luò)營銷策略有哪幾種
  • 福永網(wǎng)站設(shè)計(jì)多少錢seo入門免費(fèi)教程
  • 北京自助模板建站黑馬程序員培訓(xùn)機(jī)構(gòu)在哪
  • 學(xué)生做的網(wǎng)站成品網(wǎng)絡(luò)客服