ObjectInputStream和套接字超时

时间:2013-09-16 08:53:36

标签: java sockets jboss7.x objectinputstream

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

用于读取数据的代码已经实现并且有效,但我的问题是有时套接字超时会削减对象的读取(ObjectInputStream.readObject()),从而破坏流。

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

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

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

1 个答案:

答案 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();
    }
}