关于StreamCorruptedException: invalid type code: AC 异常

今天写客户端/服务端的通信被这个异常给搞死了。

网上查了一下,有两种说法。一种是对象流序列化的问题,一种是同一个Sokcet的对象流只能被封装一次,即只能new一个ObjectInputStream 实例或者ObjectOutputStream实例。整了一个下午加晚上,最后在朋友的帮助下解决了。

其实这两种说法是一个意思,因为输出对象流在将对象序列化的时候会在第一次加一个head上去,后面继续传输的时候省去了这一个步骤。而相对应的接受这个对象的输入流在第一次的时候去掉这个头,此后直接读取。因此,只要有任意一方多次封装了对象流,就会造成重复加head或者重复去head,导致错误。

重点就是一个socket只能封装一次对象流,你 可以用全局变量,静态变量,或者哈希表、数组之类的存起来,方便后面使用。


不过还有一个疑问一直搞不懂,我是看视频学习的,我差不多是跟视频代码一样的,视频代码没报错,我也是在下午添加一个新模块之后才保错的,早上时候还可以正常通信。啊,对了,解决问题的时候想到一个验证方法,就是对象流的引用赋空,这样对象流就被回收了,再次new的时候就不会有问题了。不过好像回收机制有一定的时间延迟的,最后还是会出错,


  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值