java - ObjectInputStream 和套接字超时

标签 java sockets jboss7.x objectinputstream

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

用于读取数据的代码已经实现并且可以工作,但我的问题是有时套接字超时会中断对象的读取(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/

相关文章:

java - 列表值和我给定的值相等,那么复选框将被选中?

python - Python套接字错误52(无效交换)指的是什么?

objective-c - 如何使用 NSOutputStream 的写消息?

c - linux C编程获取Client IP总是获取0.0.0.0

jboss - 删除 Jboss 7 的登陆页面

java - EJB 3.2 - 无法正确配置远程客户端

java - JBoss AS 7 中的 war 部署

Java AES CBC 与内联安全随机 IV - 生成相同的密文?

java - JAVA 中 process.exitValue() 的值

java - 读取 json 文件并使用 jackson.fasterxml 将其映射到 pojo 时出现 JsonMappingException