StreamCorruptedException: invalid type code: AC 问题解决
最近在I/O流和多线程Socket结合使用时 ObjectInputStream的readObject()处出现了如下错误:

出错位置:

经过网上查找时,发现是header出现了问题,具体这个header是什么,如下:
对于ObjectInputStream和ObjectOutputStream来说,在构造后的第一次读取或写入时,会先读取或写入一个对象头,之后再读取或写入对象。所以:只要有任意一方多次封装了对象流,就会造成重复加header或者重复去header,导致错误。
源码解析:ObjectOutputStream
下面圈出的位置会写入一个头:AC ED 00 05


ObjectInputStream:
下面圈出的位置会读取一个头


在ObjectInputStream和ObjectOutputStream使用时一定要“配套”,我的理解就是添加和去除的次数一样。
比如:
①ObjectOutputStream写入:头+对象+对象+对象+......

对应ObjectInputStream读取:头+对象+对象+对象+......

②ObjectOutputStream写入:头+对象+头+对象+......

对应ObjectInputStream读取:头+对象+头+对象+......

解决方法1:重写writeStreamHeader()
参考:https://blog.csdn.net/hello_word2/article/details/73521797
解决方法2:自己查是否对应好了,有没有多加或者多读了
比如我的错误:最开始我认为我对应是正确的:
读取:

发送:

然后在这里调试、修改了好几天都不行,最后就一点点根据自己的流程检查代码,发现是第一次客户给服务器发送User对象时,Server端只是Input接受了,但是并没有OutPut再输出,如下:

红框处应该加上,要不然在后面会多读取header,导致报错。
之后就能正常通信了:
