掃二維碼與項目經理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯網交流
Java Socket傳輸的我們使用的時候有許多都是在網上實現的,我們的目的實現了,并且birthday沒有被串行化;如果我們不講Address實現Serializable,會發(fā)生異常:java.io.WriteAbortedException: writing aborted

Java Socket傳輸IO流
我們都知道Java Socket傳輸的IO是一個極其龐大的類家族,也正是運用了裝飾模式的經典場景;可見,我們一部分管道是直接連接了數據源,或者直接輸出到數據源,他們能夠直接讀數據或者寫數據,我們上一節(jié)中使用的FileoutputStream和FileInputStream就是這樣的管道,他們的數據源就是指存在文件系統(tǒng)中的文件;下一部分我們要求使用的ByteArrayInputStream和ByteArrayOutputStream也是這樣的管道,不過他的數據源是存在內存中的數組;他能夠通過write把數據,字符串等等寫進這塊數組區(qū)域,并且能夠得到一個完整的字節(jié)數組。#t#
而另外的一部分則不能直接與數據源發(fā)生讀寫交互,他主要用于裝飾上一部分的管道,給這個管道賦予更加便捷的功能,諸如BufferedReader等等的,主要是提供了緩存,就好比給上一部分管道中間提供了一個“蓄水池”,這個“蓄水池”等到“水流”到了一定的程度的時候,才會一次性的流進或者流出等等,諸如ObjectInputStream和ObjectOutputStream,他們能夠直接讀寫一個Object,但是這個Object被寫到了哪里,是內存中的字節(jié)數組還是文件文件的文件中,而必須委托給其他管道實現;
在網絡中傳輸對象
在網絡中的兩臺機器中傳輸對象,前提首先是基于同一個平臺,這是序列化的基礎,所以這里主要有兩種做法:
采用Java Socket傳輸的序列化機制,將對象“壓扁”成二進制字節(jié),將二進制字節(jié)在網絡中傳輸;
自定義協(xié)議,將對象用字符串描述出來,將字符串用二進制表示,在網絡中傳輸,在另外一邊用相反的策略解析這個字符串,重新構造業(yè)務對象,這個方法能夠在異構平臺中進行傳輸而不變形,但是需要額外的編寫“壓扁”和“充氣”的代碼。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯網交流