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















 
 
 





 
 
 
 