您好,登錄后才能下訂單哦!
java怎么實(shí)現(xiàn)序列化?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
序列化 (Serialization)是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程。在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲(chǔ)區(qū)。以后,可以通過從存儲(chǔ)區(qū)中讀取或反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象。
對(duì)于任何可能包含重要的安全性數(shù)據(jù)的對(duì)象,如果可能,應(yīng)該使該對(duì)象不可序列化。如果它必須為可序列化的,請(qǐng)嘗試生成特定字段來保存不可序列化的重要數(shù)據(jù)。如果無法實(shí)現(xiàn)這一點(diǎn),則應(yīng)注意該數(shù)據(jù)會(huì)被公開給任何擁有序列化權(quán)限的代碼,并確保不讓任何惡意代碼獲得該權(quán)限。
序列化的作用
① 想把內(nèi)存中的對(duì)象保存到一個(gè)文件中或者數(shù)據(jù)庫中時(shí)候;
② 想用套接字在網(wǎng)絡(luò)上傳送對(duì)象的時(shí)候;
③ 想通過RMI傳輸對(duì)象的時(shí)候
一些應(yīng)用場(chǎng)景,涉及到將對(duì)象轉(zhuǎn)化成二進(jìn)制,序列化保證了能夠成功讀取到保存的對(duì)象。
java的序列化實(shí)現(xiàn)
要實(shí)現(xiàn)對(duì)象的序列化,最直接的操作就是實(shí)現(xiàn)Serializable接口
使用IO流中的對(duì)象流可以實(shí)現(xiàn)序列化操作,將對(duì)象保存到文件,再讀取出來。
首先創(chuàng)建一個(gè)對(duì)象,并實(shí)現(xiàn)Serializable接口:
import java.io.Serializable; public class User implements Serializable{ private static final long serialVersionUID = 1L; 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 + "]"; } }
用對(duì)象流寫一個(gè)保存對(duì)象與讀取對(duì)象的工具類:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class SerializeUtil { // 保存對(duì)象,序列化 public static void saveObject(Object object) throws Exception { ObjectOutputStream out = null; FileOutputStream fout = null; try { fout = new FileOutputStream("D:/1.txt"); out = new ObjectOutputStream(fout); out.writeObject(object); } finally { fout.close(); out.close(); } } // 讀取對(duì)象,反序列化 public static Object readObject() throws Exception { ObjectInputStream in = null; FileInputStream fin = null; try { fin = new FileInputStream("D:/1.txt"); in = new ObjectInputStream(fin); Object object = in.readObject(); return object; } finally { fin.close(); in.close(); } } }
測(cè)試:
public class Main { public static void main(String[] args) { User user = new User(); user.setName("旭旭寶寶"); user.setAge(33); // 保存 try { SerializeUtil.saveObject(user); } catch (Exception e) { System.out.println("保存時(shí)異常:" + e.getMessage()); } // 讀取 User userObject; try { userObject = (User) SerializeUtil.readObject(); System.out.println(userObject); } catch (Exception e) { System.out.println("讀取時(shí)異常:" + e.getMessage()); } } }
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。