为了账号安全,请及时绑定邮箱和手机立即绑定

StreamCorruptedException:无效类型代码:ac

StreamCorruptedException:无效类型代码:ac

繁星点点滴滴 2019-06-01 14:39:13
StreamCorruptedException:无效类型代码:ac我的问题是,当它第二次尝试读取对象时,它会抛出异常:java.io.StreamCorruptedException: invalid type code: AC     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356)     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)     at Client.run(BaseStaInstance.java:313)java.io.StreamCorruptedException: invalid type code: AC     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356)     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)     at Client.run(BaseStaInstance.java:313)当我第一次发送完全相同的对象消息时,当我第二次尝试做相同的事情时,它会抛出上面的错误。是否需要对readObject()方法进行再分类?我甚至打印出了下面一行正在接收的消息对象,它与它工作的第一个实例完全相同。Object buf = myInput.readObject();我假设附加有一些问题,但我真的没有必要追加。我只想每次都读一篇新的文章。我真的很感激能帮我修复这个错误。谢谢。==================================在这一行之前,我只是在run()方法中为套接字创建输入和输出对象。对象声明在类的run()方法之外:-@Overridepublic void run() {     try {         sleep((int) 1 * 8000);     } catch (Exception e) {         e.printStackTrace();     }     try {         //Creating input and output streams to transfer messages to the server         myOutput = new ObjectOutputStream(skt.getOutputStream());         myInput = new ObjectInputStream(skt.getInputStream());         while (true) {             buf = myInput.readObject();         }     } catch (UnknownHostException e) {         e.printStackTrace();     } catch (IOException e) {         e.printStackTrace();     } finally {         try {         } catch (Exception e) {             e.printStackTrace();         }     }}你说得对,我没有关闭物体。我不知道该怎么做。
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

潜在的问题是,您正在使用一个新的ObjectOutputStream写入现有的ObjectInputStream你已经用了ObjectOutputStream写信给。这些流具有由相应构造函数编写和读取的标头,因此如果您创建另一个ObjectOutputStream你要写一个新的标题,开头是-你猜怎么着?-0xAC,和现存的ObjectInputStream在这一点上不期待另一个标题,所以它会变胖。

在@trashhead引用的Java论坛线程中,我应该省略关于“两端都有新对象”的部分:这太浪费了。在套接字的生命周期中使用单个OOS和OIS,并且不要使用套接字上的任何其他流。

如果你想忘记你写的东西,请使用ObjectOutputStream.reset().

也不要使用任何其他的流或者ReadersWriters在同一个插座上。对象流API可以处理所有Java基本数据类型和所有Serializable上课。


查看完整回答
反对 回复 2019-06-01
  • 1 回答
  • 0 关注
  • 736 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信