无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

StreamCorruptedException: invalid type code: AC 問題解決

2022-10-24 20:33 作者:-牧野神奈--  | 我要投稿

????最近在I/O流和多線程Socket結(jié)合使用時 ObjectInputStream的readObject()處出現(xiàn)了如下錯誤:


????出錯位置:

????經(jīng)過網(wǎng)上查找時,發(fā)現(xiàn)是header出現(xiàn)了問題,具體這個header是什么,如下:

????對于ObjectInputStream和ObjectOutputStream來說,在構(gòu)造后的第一次讀取或?qū)懭霑r,會先讀取或?qū)懭胍粋€對象頭,之后再讀取或?qū)懭雽ο?。所以:只要有任意一方多次封裝了對象流,就會造成重復(fù)加header或者重復(fù)去header,導(dǎo)致錯誤。

????源碼解析:ObjectOutputStream

????下面圈出的位置會寫入一個頭:AC ED 00 05

writeStreamHeader()函數(shù)

????ObjectInputStream:

????下面圈出的位置會讀取一個頭

readStreamHeader()函數(shù)

????在ObjectInputStream和ObjectOutputStream使用時一定要“配套”,我的理解就是添加和去除的次數(shù)一樣。

????比如:

①ObjectOutputStream寫入:頭+對象+對象+對象+......

對應(yīng)ObjectInputStream讀?。侯^+對象+對象+對象+......

②ObjectOutputStream寫入:頭+對象+頭+對象+......

對應(yīng)ObjectInputStream讀?。侯^+對象+頭+對象+......

解決方法1:重寫writeStreamHeader()

參考:https://blog.csdn.net/hello_word2/article/details/73521797

解決方法2:自己查是否對應(yīng)好了,有沒有多加或者多讀了

比如我的錯誤:最開始我認(rèn)為我對應(yīng)是正確的:

讀取:

發(fā)送:

????然后在這里調(diào)試、修改了好幾天都不行,最后就一點點根據(jù)自己的流程檢查代碼,發(fā)現(xiàn)是第一次客戶給服務(wù)器發(fā)送User對象時,Server端只是Input接受了,但是并沒有OutPut再輸出,如下:

????紅框處應(yīng)該加上,要不然在后面會多讀取header,導(dǎo)致報錯。

????之后就能正常通信了:


StreamCorruptedException: invalid type code: AC 問題解決的評論 (共 條)

分享到微博請遵守國家法律
十堰市| 贡嘎县| 万宁市| 兖州市| 双流县| 额敏县| 阿勒泰市| 葫芦岛市| 白城市| 西青区| 得荣县| 阳东县| 潍坊市| 青田县| 根河市| 类乌齐县| 柳州市| 汝南县| 鸡东县| 东城区| 芒康县| 翁牛特旗| 刚察县| 淮阳县| 泰来县| 镇原县| 分宜县| 阿图什市| 昭通市| 武平县| 泽库县| 禄劝| 南漳县| 五台县| 始兴县| 沙河市| 南召县| 紫阳县| 阿鲁科尔沁旗| 双牌县| 民乐县|