麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

java中對象的序列化與反序列化深入講解

2024-07-14 08:42:22
字體:
來源:轉載
供稿:網友

引言:

序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化后的對象進行讀寫操作,也可將流化后的對象傳輸于網絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。

  • 把對象轉換為字節序列的過程稱為對象的序列化。
  • 把字節序列恢復為對象的過程稱為對象的反序列化。

在很多應用中,需要對某些對象進行序列化,讓它們離開內存空間,入住物理硬盤,以便長期保存。比如最常見的是Web服務器中的Session對 象,當有 10萬用戶并發訪問,就有可能出現10萬個Session對象,內存可能吃不消,于是Web容器就會把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對象還原到內存中。

當兩個進程在進行遠程通信時,彼此可以發送各種類型的數據。無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方需要把這個Java對象轉換為字節序列,才能在網絡上傳送;接收方則需要把字節序列再恢復為Java對象。

序列化是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程,在序列化期間,對象將其帶你過去的狀態寫入到臨時或持儲存區,反序列化就是重新創建對象的過程,此對象來自于臨時或持久儲存區。

序列化的作用:

就好比如存儲數據到數據庫,將一些數據持久化到數據庫中,而有時候需要將對象持久化,雖然說將對象狀態持久化的方式有很多,但是java給我們提供了一種很便捷的方式,那就是序列化,序列化可以實現對象到文件之間的直接轉換,實現細節對我們隱藏。

具體的三種用途:

  • 將對象的狀態信息持久化保存到硬盤上
  • 將對象信息在網絡上傳輸
  • 深度克隆(就是序列化后再反序列化)

方式一:實現Serializable接口,通過序列化流

實現Serializable接口,通過ObjectOutputStream和ObjectInputStream將對象序列化和反序列化。

import java.io.*;public class User implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public User(String name, int age) {  this.name = name;  this.age = age; } @Override public String toString() {  return "User{" +    "name='" + name + '/'' +    ", age=" + age +    '}'; } public static void main(String[] args) throws IOException, ClassNotFoundException {//  User user = new User("gol",22);//  ByteArrayOutputStream bo = new ByteArrayOutputStream();//  ObjectOutputStream oo = new ObjectOutputStream(bo);//  oo.writeObject(user);//序列化.user寫入字節數組流中//  ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());//  ObjectInputStream oi = new ObjectInputStream(bi);//  User userSer = (User) oi.readObject();//反序列化//  System.out.println(userSer);  User user = new User("gol",22);  FileOutputStream fos = new FileOutputStream("a.txt");  ObjectOutputStream oo = new ObjectOutputStream(fos);  oo.writeObject(user);//序列化.user寫入文件中  FileInputStream fis = new FileInputStream("a.txt");  ObjectInputStream oi = new ObjectInputStream(fis);  User userSer = (User) oi.readObject();//反序列化  System.out.println(userSer);  oi.close();  fis.close();  oo.close();  fos.close(); }}

方式二:實現Externalizable接口,重寫writeExternal和readExternal方法

Externalizable接口繼承了Serializable接口,替我們封裝了兩個方法,一個用于序列化,一個用于反序列化。這種方式是將屬性序列化,注意這種方式transient修飾詞將失去作用,也就是說被transient修飾的屬性,只要你在writeExternal方法中序列化了該屬性,照樣也會得到序列化。

import java.io.*;public class User implements Externalizable { private static final long serialVersionUID = 1L; private String name; private int age; public User() { } public User(String name, int age) {  this.name = name;  this.age = age; } @Override public String toString() {  return "User{" +    "name='" + name + '/'' +    ", age=" + age +    '}'; } @Override public void writeExternal(ObjectOutput out) throws IOException {  out.writeObject(this.name);//將屬性分別序列化  out.writeObject(this.age); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {  this.name=(String)in.readObject();//反序列化屬性  this.age=(int)in.readObject(); } public static void main(String[] args) throws IOException, ClassNotFoundException {  FileOutputStream fos = new FileOutputStream("a.txt");  ObjectOutputStream oo = new ObjectOutputStream(fos);  FileInputStream fis = new FileInputStream("a.txt");  ObjectInputStream oi = new ObjectInputStream(fis);  User user = new User("gol",19);  user.writeExternal(oo);//序列化  User userEnr = new User();  userEnr.readExternal(oi);//反序列化  System.out.println(userEnr);  oi.close();  fis.close();  oo.close();  fos.close(); }}

總結:

注意以下三點:

  • Serializable接口是標記接口,是個空接口,用于標識該類可以被序列化。
  • transient是屬性修飾符,被其修飾的屬性將不會被序列化,但是使用方式二的話,明確寫明該屬性序列化同樣可以得到序列化。
  • serialVersionUID屬性是類的序列化標識ID,若序列化的對象和反序列化的對象其serialVersionUID屬性不一樣則會報錯。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美成人午夜一区二区三区 | 72pao成人国产永久免费视频 | 国产一级做a | 成人免费区 | 欧美成人鲁丝片在线观看 | 欧美日韩国产一区二区三区在线观看 | 国产午夜精品一区二区三区在线观看 | 成人免费精品视频 | 吾色视频| 国产在线观看91精品 | 撅高 自己扒开 调教 | 国产91成人 | 成人免费自拍视频 | 羞羞视频.www在线观看 | 视屏一区 | 免费看性xxx高清视频自由 | 久久久成人动漫 | 国产a级久久 | 久久久久免费精品国产小说色大师 | 久久久久夜色精品国产老牛91 | 免费国产一级淫片 | 精品久久久久久久久亚洲 | 国产色视频在线观看免费 | 国产毛片毛片毛片 | 49vvv| 成年免费在线视频 | 日韩视频在线视频 | 国产污污视频 | 黄色视频一级毛片 | 免费一级a毛片在线播放视 日日草夜夜操 | 电影一级毛片 | 成人免费av在线播放 | 欧美h版在线观看 | 国产精品久久久在线观看 | 综合在线视频 | 91av爱爱 | 91精品国产综合久久婷婷香蕉 | 精品一区二区电影 | 久久精精| 国产99精品视频 | 免费在线观看国产精品 |