gpt4 book ai didi

java - ObjectInputStream 和套接字超时

转载 作者:行者123 更新时间:2023-12-01 14:07:04 25 4
gpt4 key购买 nike

我有一系列通过网络套接字发送的对象。

用于读取数据的代码已经实现并且可以工作,但我的问题是有时套接字超时会中断对象的读取(ObjectInputStream.readObject()),从而损坏流.

我使用超时,因为此读取是在 JBoss 资源适配器内执行的,因此我不希望它无限期地阻塞并可能禁用 EAR 的取消部署或正常停止。

是否有一种优雅(可中断)的方式来处理读取对象流,而无需使用单独的线程并强制终止它?

附注我知道使用对象流是一个非常糟糕的决定,但这就是客户端应用程序发送数据的方式,我无法更改它。

最佳答案

我有这样的东西。

private volatile boolean closed = false;
private Closable/*e.g. ObjectOutputStream */ onClose = ...;


public void close() {
closed = true;
try {
if (onCLose != null) onClose.close();
} catch(IOException ignored) {
}
}


private Object readObject() {
try {
if (closed) throw new IllegalStateException();
return steam.readObject();
} finally {
if (closed) throw new IllegalStateException();
}
}

关于java - ObjectInputStream 和套接字超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18823967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com