Java接口為什么不支持序列化?系統(tǒng)交互中,為什么不可以通過接口傳輸數(shù)據(jù)?
網(wǎng)友解答: 這是一個非常好的問題,Java序列化是Java語言中一個非常重要的內(nèi)容。很多Java初學者都搞不清楚Java序列化的作用和意義,要了解Java為什么不序列化接口,首先要明白一
這是一個非常好的問題,Java序列化是Java語言中一個非常重要的內(nèi)容。
很多Java初學者都搞不清楚Java序列化的作用和意義,要了解Java為什么不序列化接口,首先要明白一件事情,那就是為什么要序列化?序列化的目的是完成對象的存儲和傳遞,傳遞往往是對象序列化最常見的目的。
下面,我們再看一下Java接口的概念。Java中的接口還有一個名字,那就是“全抽象”,所以Java中的接口本身并不存在序列化的基礎,因為接口本身是抽象的。在系統(tǒng)的交互中,接口恰恰起到了關鍵的作用,那就是為傳遞定義“標準”。
描述Java序列化一個比較常見的方式是結合RMI(一個比較傳統(tǒng)的Java技術,或者叫老技術)來完成,因為RMI既能夠描述序列化的過程,也能夠描述數(shù)據(jù)傳遞的過程,同時凸顯了接口的重要性,下面我們看一個例子:
首先定義一個實體類Student,按照Java序列化的要求,Student需要實現(xiàn)“聲明式接口”Serializable,之所為稱之為“聲明式接口”,是因為此接口中沒有定義任何方法。為了演示的清晰性,類中并沒有定義太多的屬性和方法。接著就需要定義遠程接口了:
注意遠程接口的定義擴展了Remote接口,這里面需要注意的是,java中接口可以同時擴展多個接口,也就是說定義接口時,extends后面可以有多個接口。接著定義服務類:
服務類完成了遠程方法的實現(xiàn),并把服務注冊到了目錄服務器上,這樣就可以接收調(diào)用請求了。下面,看一下客戶端的定義:
通過這個例子比較完整的呈現(xiàn)了Java序列化在網(wǎng)絡交互過程中的作用,具體的writeObject和readObject的過程是被隱含實現(xiàn)的。
我使用Java語言多年,我會陸續(xù)在酷米寫一些關于軟件開發(fā)方面的文章,感興趣的朋友可以關注我的酷米號,相信一定會有所收獲。
如果有Java或其他編程語言方面的問題,也可以咨詢我。
謝謝!