【问题标题】:Recovering a crashed InputStream恢复崩溃的 InputStream
【发布时间】:2011-06-01 02:00:31
【问题描述】:

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

我想知道他们所说的“恢复流状态”是什么意思...有没有合适的方法让我恢复 objectInputStream 或者我应该做一个socket.getInputStream()

【问题讨论】:

    标签: java stream inputstream classcastexception recover


    【解决方案1】:

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

    【讨论】:

    • 好吧,我怀疑 ObjectInputStream 坏了,因为在我收到 ClassCastException 后,我的 ObjectInputStream 停止接收来自客户端的数据包。
    • readObject 抛出异常还是强制转换抛出异常?
    • 嗯,我明白你的意思了,这就是我一开始怀疑的......为什么当我知道我正在发送它们更正时,我会收到 ClassCastExceptions;顺便说一句,演员表 90% 的时间都在工作,只是有时它会崩溃。我尝试了一个小实验...尝试在 ObjectInputStream 崩溃后重新加载它,所以我调用 objectInputStream = new ObjectInputStream(socket.getInputStream); 并抛出 StreamCorruptedException
    • 这并不奇怪,因为这意味着它得到了一个不正确的标题,而且由于你在中间得到了流,所以不会有一个正确的标题。
    • 用不那么脆弱的东西来测试连接可能会有所帮助,比如读取一个字节序列(如果你还没有这样做的话)。
    猜你喜欢
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2023-03-24
    相关资源
    最近更新 更多