Java 恢复崩溃的输入流

Java 恢复崩溃的输入流,java,stream,inputstream,classcastexception,recover,Java,Stream,Inputstream,Classcastexception,Recover,我正在编写一个服务器,并使用ObjectInputStream来处理专有数据包。最近,当我想调用objectInputStream.readObject()并尝试将它们强制转换为专有数据包时,有时会遇到一些意外的ClassCastExceptions。我一直在尝试跟踪问题,我一直在想这是否是因为objectInputStream由于某些问题而崩溃。根据方法objectInputStream.readObject()的文档。。。“所有异常对InputStream都是致命的,并使其处于不确定状态;由

我正在编写一个服务器,并使用
ObjectInputStream
来处理专有数据包。最近,当我想调用
objectInputStream.readObject()
并尝试将它们强制转换为专有数据包时,有时会遇到一些意外的
ClassCastException
s。我一直在尝试跟踪问题,我一直在想这是否是因为
objectInputStream
由于某些问题而崩溃。根据方法
objectInputStream.readObject()
的文档。。。“所有异常对InputStream都是致命的,并使其处于不确定状态;由调用方忽略或恢复流状态。”


我想知道“恢复流状态”是什么意思。。。有没有合适的方法来恢复objectInputStream,或者我应该执行一个
socket.getInputStream()

如果我理解正确,您的异常不是由
objectInputStream.readObject()
引起的,而是通过将(成功返回的)对象强制转换到您试图读取的对象,因此,异常不应影响流。

如果我理解正确,您的异常不是由
objectInputStream.readObject()
引起的,而是通过将(成功返回的)对象强制转换为您试图读取的对象,所以异常不应该影响流。

我怀疑ObjectInputStream被破坏了,因为在我得到ClassCastException后,我的ObjectInputStream停止从客户端接收数据包。是
readObject
引发异常还是强制转换引发异常?我明白你的意思,这是我一开始怀疑的。。。为什么当我知道我正在纠正时,我会收到ClassCastException;顺便说一句,演员阵容90%的时间都能发挥作用,只是有时候会崩溃。我尝试了一个小实验。。。试图在ObjectInputStream崩溃后重新加载它,因此我调用
ObjectInputStream=newObjectInputStream(socket.getInputStream)抛出一个<代码> SturraseExtExcPosip>代码,这并不奇怪,因为这意味着它得到了一个不正确的标头,既然你在中间得到了流,就不会有一个正确的标头。这可能有助于测试一些不太脆弱的连接,比如读取一个字节序列。(如果您还没有这样做)。我怀疑ObjectInputStream被破坏了,因为在我收到ClassCastException后,我的ObjectInputStream停止从客户端接收数据包。是
readObject
引发了异常还是强制转换引发了异常?我明白你的意思了,这是我一开始怀疑的…为什么我会收到ClassCastExceptionn我知道我正在发送更正;顺便说一句,强制转换90%的时间都能工作,只是有时会崩溃。我尝试了一个小实验…试图在ObjectInputStream崩溃后重新加载它,所以我调用
ObjectInputStream=new ObjectInputStream(socket.getInputStream)这就不奇怪了,因为这意味着它得到了一个不正确的标头,既然你在中间得到了流,就不会有一个正确的标头。这可能有助于测试一些不太脆弱的连接,比如读取一个字节序列。(如果你还没有这样做的话)。