0

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

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

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

是否有一种优雅(可中断)的方式来处理读取对象流而不使用单独的线程并强行杀死它?

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

4

1 回答 1

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();
    }
}
于 2013-09-16T08:59:38.197 回答