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