面试题答案
一键面试常见异常及处理策略
IOException
- 原因:这是一个通用的I/O异常,在NIO操作发生I/O错误时抛出,比如底层的网络连接中断、文件读取写入错误等。
- 处理策略:捕获该异常,记录详细的错误日志,包含异常信息和发生异常的具体操作,以便后续排查问题。对于可恢复的错误,如临时的网络故障,可以尝试重新连接或操作;对于不可恢复的错误,如文件损坏,需要向用户反馈明确的错误信息,并可能需要清理相关资源。
ClosedChannelException
- 原因:当尝试对已关闭的
Channel
进行操作时抛出。例如,在SocketChannel
已关闭的情况下,还尝试读取或写入数据。 - 处理策略:捕获异常后,检查业务逻辑,确认
Channel
关闭是否符合预期。如果不符合预期,检查关闭Channel
的代码逻辑是否有误,是否存在提前关闭的情况。若符合预期,需要调整业务逻辑,避免对已关闭的Channel
进行无效操作。
- 原因:当尝试对已关闭的
AsynchronousCloseException
- 原因:当一个
Channel
在另一个线程中被关闭,而当前线程正在该Channel
上进行操作时抛出。比如在一个线程中关闭SocketChannel
,而另一个线程正在该Channel
上进行读取操作。 - 处理策略:捕获异常后,同样需要记录日志。根据业务需求,可以选择重试操作(如果认为重新连接或重新操作可能成功),或者向用户反馈操作失败信息,同时清理相关资源,确保程序的稳定性。
- 原因:当一个
NotYetConnectedException
- 原因:在使用
SocketChannel
等Channel
时,在连接尚未建立完成就尝试进行读写操作会抛出此异常。例如,在调用SocketChannel.connect()
方法后,还未确认连接成功就开始读取数据。 - 处理策略:捕获异常后,等待连接建立完成。可以通过轮询
isConnected()
方法或者使用Future
等异步机制来确认连接状态,直到连接成功后再进行读写操作。
- 原因:在使用
UnresolvedAddressException
- 原因:当试图连接到一个无法解析的地址时抛出,比如提供的主机名无法解析为IP地址。
- 处理策略:捕获异常后,检查提供的地址是否正确,可能需要提示用户重新输入正确的地址。同时记录错误日志,以便分析地址解析失败的原因,如网络配置问题或DNS故障等。