国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 序列化與反序列化的實例詳解

java 序列化與反序列化的實例詳解

2020-12-02 10:39cakin24 Java教程

這篇文章主要介紹了java 序列化與反序列化的實例詳解的相關資料,需要的朋友可以參考下

 1.Java序列化反序列化

 Java序列化是指把Java對象轉換為字節序列的過程;而Java反序列化是指把字節序列恢復為Java對象的過程。

 2.為什么需要序列化與反序列化

 我們知道,當兩個進程進行遠程通信時,可以相互發送各種類型的數據,包括文本、圖片、音頻、視頻等, 而這些數據都會以二進制序列的形式在網絡上傳送。那么當兩個Java進程進行通信時,能否實現進程間的對象傳送呢?答案是可以的。如何做到呢?這就需要Java序列化與反序列化了。換句話說,一方面,發送方需要把這個Java對象轉換為字節序列,然后在網絡上傳送;另一方面,接收方需要從字節序列中恢復出Java對象。

 序列化簡介

Java 提供了一種對象序列化的機制,該機制中,一個對象可以被表示為一個字節序列,該字節序列包括該對象的數據、有關對象的類型的信息和存儲在對象中數據的類型。

將序列化對象寫入文件之后,可以從文件中讀取出來,并且對它進行反序列化,也就是說,對象的類型信息、對象的數據,還有對象中的數據類型可以用來在內存中新建對象。
整個過程都是 Java 虛擬機(JVM)獨立的,也就是說,在一個平臺上序列化的對象可以在另一個完全不同的平臺上反序列化該對象。

ObjectInputStreamObjectOutputStream 是高層次的數據流,它們包含序列化和反序列化對象的方法。

ObjectOutputStream 類包含很多寫方法來寫各種數據類型,但是一個特別的方法例外:

java" id="highlighter_227950">
?
1
publicfinalvoidwriteObject(Objectx)throwsIOException

上面的方法序列化一個對象,并將它發送到輸出流。相似的 ObjectInputStream 類包含如下反序列化一個對象的方法:

?
1
publicfinalObjectreadObject()throwsIOException, ClassNotFoundException

該方法從流中取出一個對象,并將對象反序列化。它的返回值為Object,因此,你需要將它轉換成合適的數據類型。
為了演示序列化在Java中是怎樣工作的,我們定義Employee類,該類實現了Serializable 接口。

Employee.java 文件代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
public class Employee implements java.io.Serializable
{
  public String name;
  public String address;
  public transient int SSN;
  public int number;
  public void mailCheck()
  {
   System.out.println("Mailing a check to " + name
              + " " + address);
  }
}

注意,一個類的對象要想序列化成功,必須滿足兩個條件:

1、該類必須實現 java.io.Serializable 對象。

2、該類的所有屬性必須是可序列化的。如果有一個屬性不是可序列化的,則該屬性必須注明是短暫的。
如果你想知道一個 Java 標準類是否是可序列化的,請查看該類的文檔。檢驗一個類的實例是否能序列化十分簡單, 只需要查看該類有沒有實現 java.io.Serializable接口。

序列化對象

ObjectOutputStream 類用來序列化一個對象,如下的 SerializeDemo 例子實例化了一個 Employee 對象,并將該對象序列化到一個文件中。

該程序執行后,就創建了一個名為 employee.ser 文件。該程序沒有任何輸出,但是你可以通過代碼研讀來理解程序的作用。

注意: 當序列化一個對象到文件時, 按照 Java 的標準約定是給文件一個 .ser 擴展名。

SerializeDemo.java 文件代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.io.*;
  
public class SerializeDemo
{
  public static void main(String [] args)
  {
   Employee e = new Employee();
   e.name = "Reyan Ali";
   e.address = "Phokka Kuan, Ambehta Peer";
   e.SSN = 11122333;
   e.number = 101;
   try
   {
     FileOutputStream fileOut =
     new FileOutputStream("employee.ser");
     ObjectOutputStream out = new ObjectOutputStream(fileOut);
     out.writeObject(e);
     out.close();
     fileOut.close();
     System.out.println("Serialized data is saved in employee.ser");
   }catch(IOException i)
   {
     i.printStackTrace();
   }
  }
}

反序列化對象

下面的 DeserializeDemo 程序實現了反序列化,employee.ser 存儲了 Employee 對象。

DeserializeDemo.java 文件代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.*;
public class DeserializeDemo 
{
    public static void main(String [] args)
    {
     Employee e = null;
     try
     {
       FileInputStream fileIn = new FileInputStream("employee.ser");
       ObjectInputStream in = new ObjectInputStream(fileIn);
       e = (Employee) in.readObject();
       in.close();
       fileIn.close();
     }catch(IOException i)
     {
       i.printStackTrace();
       return;
     }catch(ClassNotFoundException c)
     {
       System.out.println("Employee class not found");
       c.printStackTrace();
       return;
     }
     System.out.println("Deserialized Employee...");
     System.out.println("Name: " + e.name);
     System.out.println("Address: " + e.address);
     System.out.println("SSN: " + e.SSN);
     System.out.println("Number: " + e.number);
    }
}

以上程序編譯運行結果如下所示:

?
1
2
3
4
5
Deserialized Employee...
Name: Reyan Ali
Address: Phokka Kuan, Ambehta Peer
SSN: 0
Number: 101

這里要注意以下要點:

readObject() 方法中的 try/catch代碼塊嘗試捕獲 ClassNotFoundException 異常。對于 JVM 可以反序列化對象,它必須是能夠找到字節碼的類。如果JVM在反序列化對象的過程中找不到該類,則拋出一個 ClassNotFoundException 異常。

注意,readObject() 方法的返回值被轉化成 Employee 引用。

當對象被序列化時,屬性 SSN 的值為 111222333,但是因為該屬性是短暫的,該值沒有被發送到輸出流。所以反序列化后 Employee 對象的 SSN 屬性為 0。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://cakin24.iteye.com/blog/2344504

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91人人 | 青青国产在线视频 | 成人免费淫片aa视频免费 | 国产精品久久久久久久久久免费动 | 国产人久久人人人人爽 | av在线一区二区三区 | 欧美日韩一级二级三级 | 成人亚洲欧美 | 国产成人毛片 | 久久久99久久久国产自输拍 | 国产精品久久久久久久午夜片 | 一区二区三区在线看 | 欧美男人的天堂 | 我要看日本黄色小视频 | 99久久99久久精品 | 先锋资源在线观看 | 啪啪导航 | 成人在线激情 | 色接久久 | 中文字幕一区二区在线观看 | 日韩欧美中文字幕在线视频 | 精品国产一级毛片 | 日韩视频一区 | 999久久久国产999久久久 | 国产一区二区视频免费看 | 亚洲精品无码专区在线播放 | 国产成人网 | 日韩一区二区中文 | 久久天堂| 精品乱子伦一区二区三区 | 欧美视频区 | 久久久99精品免费观看 | 看一级片 | 久久久91精品国产一区二区三区 | 久久久免费视频观看 | 中文字幕大全 | 成人黄色在线观看 | 精品国产一区二区三区性色av | 亚洲四区 | 自拍亚洲| 成人精品视频免费在线观看 |