您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java序列化的機制介紹”,在日常操作中,相信很多人在Java序列化的機制介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java序列化的機制介紹”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Java 序列化
Java 提供了一種對象序列化的機制,該機制中,一個對象可以被表示為一個字節(jié)序列,該字節(jié)序列包括該對象的數(shù)據(jù)、有關(guān)對象的類型的信息和存儲在對象中數(shù)據(jù)的類型。
將序列化對象寫入文件之后,可以從文件中讀取出來,并且對它進行反序列化,也就是說,對象的類型信息、對象的數(shù)據(jù),還有對象中的數(shù)據(jù)類型可以用來在內(nèi)存中新建對象。
整個過程都是Java虛擬機(JVM)獨立的,也就是說,在一個平臺上序列化的對象可以在另一個完全不同的平臺上反序列化該對象。
類ObjectInputStream 和ObjectOutputStream是高層次的數(shù)據(jù)流,它們包含序列化和反序列化對象的方法。
ObjectOutputStream 類包含很多寫方法來寫各種數(shù)據(jù)類型,但是一個特別的方法例外:public final void writeObject(Object x) throws IOException
上面的方法序列化一個對象,并將它發(fā)送到輸出流。相似的ObjectInputStream 類包含如下反序列化一個對象的方法:
public final Object readObject() throws IOException,
ClassNotFoundException
請注意,一個類的對象要想序列化成功,必須滿足兩個條件:
1. 該類必須實現(xiàn) java.io.Serializable 對象。
2. 該類的所有屬性必須是可序列化的。如果有一個屬性不是可序列化的,則該屬性必須注明是短暫的。
http://www.iis7.com/b/wzjk/
如果你想知道一個Java標準類是否是可序列化的,請查看該類的文檔。檢驗一個類的實例是否能序列化十分簡單, 只需要查看該類有沒有實現(xiàn)java.io.Serializable接口。
。。。
序列化對象
ObjectOutputStream 類用來序列化一個對象,如下的SerializeDemo例子實例化了一個Employee對象,并將該對象序列化到一個文件中。
該程序執(zhí)行后,就創(chuàng)建了一個名為employee.ser文件。該程序沒有任何輸出,但是你可以通過代碼研讀來理解程序的作用。
注意: 當序列化一個對象到文件時, 按照Java的標準約定是給文件一個.ser擴展名。
。。。
反序列化對象
這里要注意以下要點:
readObject() 方法中的try/catch代碼塊嘗試捕獲 ClassNotFoundException異常。對于JVM可以反序列化對象,它必須是能夠找到字節(jié)碼的類。如果JVM在反序列化對象的過程中找不到該類,則拋出一個 ClassNotFoundException異常。
注意,readObject()方法的返回值被轉(zhuǎn)化成Employee引用。
當對象被序列化時,屬性SSN的值為111222333,但是因為該屬性是短暫的,該值沒有被發(fā)送到輸出流。所以反序列化后Employee對象的SSN屬性為0。
::::::::::::::::::::::::::::::::::::::::::::::
Java 網(wǎng)絡編程
網(wǎng)絡編程是指編寫運行在多個設備(計算機)的程序,這些設備都通過網(wǎng)絡連接起來。
java.net包中J2SE的API包含有類和接口,它們提供低層次的通信細節(jié)。你可以直接使用這些類和接口,來專注于解決問題,而不用關(guān)注通信細節(jié)。
java.net包中提供了兩種常見的網(wǎng)絡協(xié)議的支持:
-TCP: TCP是傳輸控制協(xié)議的縮寫,它保障了兩個應用程序之間的可靠通信。通常用于互聯(lián)網(wǎng)協(xié)議,被稱TCP / IP。
-UDP:UDP是用戶數(shù)據(jù)報協(xié)議的縮寫,一個無連接的協(xié)議。提供了應用程序之間要發(fā)送的數(shù)據(jù)的數(shù)據(jù)包。
現(xiàn)在我們主要講解以下兩個主題。
-Socket 編程: 這是使用最廣泛的網(wǎng)絡概念,它已被解釋地非常詳細
-URL 處理: 這部分會在另外的篇幅里講,點擊這里更詳細地了解在Java語言中的URL處理。
。。。
Socket 編程
套接字使用TCP提供了兩臺計算機之間的通信機制。 客戶端程序創(chuàng)建一個套接字,并嘗試連接服務器的套接字。
當連接建立時,服務器會創(chuàng)建一個Socket對象??蛻舳撕头掌鳜F(xiàn)在可以通過對Socket對象的寫入和讀取來進行進行通信。
java.net.Socket類代表一個套接字,并且java.net.ServerSocket類為服務器程序提供了一種來監(jiān)聽客戶端,并與他們建立連接的機制。
以下步驟在兩臺計算機之間使用套接字建立TCP連接時會出現(xiàn):
-服務器實例化一個ServerSocket對象,表示通過服務器上的端口通信。
-服務器調(diào)用 ServerSocket類 的accept()方法,該方法將一直等待,直到客戶端連接到服務器上給定的端口。
-服務器正在等待時,一個客戶端實例化一個Socket對象,指定服務器名稱和端口號來請求連接。
-Socket類的構(gòu)造函數(shù)試圖將客戶端連接到指定的服務器和端口號。如果通信被建立,則在客戶端創(chuàng)建一個Socket對象能夠與服務器進行通信。
-在服務器端,accept()方法返回服務器上一個新的socket引用,該socket連接到客戶端的socket。
連接建立后,通過使用I/O流在進行通信。每一個socket都有一個輸出流和一個輸入流。客戶端的輸出流連接到服務器端的輸入流,而客戶端的輸入流連接到服務器端的輸出流。
TCP是一個雙向的通信協(xié)議,因此數(shù)據(jù)可以通過兩個數(shù)據(jù)流在同一時間發(fā)送.以下是一些類提供的一套完整的有用的方法來實現(xiàn)sockets。
到此,關(guān)于“Java序列化的機制介紹”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。