我有一系列通过网络套接字发送的对象。
用于读取数据的代码已经实现并且有效,但我的问题是有时套接字超时会削减对象的读取(ObjectInputStream.readObject()
),从而破坏流。
我使用超时,因为这个读取是在JBoss资源适配器中执行的,所以我不希望它无限期地阻塞,并且可能会禁用取消部署或正常停止EAR。
是否有一种优雅(可中断)的处理读取对象流的方法,而不使用单独的线程并强行杀死它?
P.S。我知道使用对象流是一个非常糟糕的决定,但这只是客户端应用程序发送数据的方式,我无法改变它。
答案 0 :(得分:1)
我有类似的东西。
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();
}
}