Java线程中的ObjectInputStream失败

托马斯·弗朗西斯科

我无法从套接字获取输入和输出流,每次到达getInputStream / getOutputStream时,我的代码都会阻塞。

class Connection implements Runnable {
    private static final Logger logger = Logger.getLogger(Connection.class.getName());
    Socket connection = null;
    Boolean serverIsDown = false;
    Thread thread = null;
    ObjectInputStream ois = null;
    ObjectOutputStream oos = null;
    Context ctx = null;

    public Connection(Socket accept, Boolean serverIsDown) {
        logger.log(Level.INFO, "Connected" + accept.getRemoteSocketAddress());
        this.connection = accept;
        this.serverIsDown = serverIsDown;

        this.thread = new Thread(this, "Client Connection");
        this.thread.start();

    }

    public void init() throws IOException {
        while (true) {
            System.out.println("Hit enter to send object");
            System.in.read();
            Request request = new Request();
            oos.writeObject(request);
        }
    }

    @Override
    public void run() {
        try {
            this.ois = new ObjectInputStream(this.connection.getInputStream()); //Blocks here
            this.oos = new ObjectOutputStream(this.connection.getOutputStream());
            this.init();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

阻塞时没有输出错误。

柯鸿仪

就像提到的文档一样:http : //docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#ObjectInputStream(java.io.InputStream)

创建一个ObjectInputStream,它从指定的InputStream读取。从流中读取并验证序列化流头。此构造函数将阻塞,直到相应的ObjectOutputStream写入并刷新了标头为止

我建议您使用两个线程来处理来自接受的套接字的输入和输出流,以避免阻塞。另一种更好的方法是使用线程池和一些异步io(例如;选择器),而不是为每个接受的套接字分配线程。

也可以参考以下另一篇文章:new ObjectInputStream()块

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:同步线程失败

来自分类Dev

Java线程同步失败

来自分类Dev

Java线程同步失败

来自分类Dev

在 Spring Boot 的 Java 线程中自动装配 bean 失败

来自分类Dev

创建ObjectInputStream时线程挂起

来自分类Dev

使用Java中的ObjectInputStream从文件中检索String数组?

来自分类Dev

如果有人在java中失败,如何停止所有线程?

来自分类Dev

在线程中创建纹理失败

来自分类Dev

Java中的线程结构

来自分类Dev

Java中的线程中断

来自分类Dev

Java中的进程与线程

来自分类Dev

我在Java中的线程

来自分类Dev

暂停Java中的线程

来自分类Dev

线程中的Java请求

来自分类Dev

我在Java中的线程

来自分类Dev

Java中的线程管理

来自分类Dev

暂停Java中的线程

来自分类Dev

Java中的多线程

来自分类Dev

Java中的后台线程

来自分类Dev

Java线程中的异常

来自分类Dev

java中的异常线程

来自分类Dev

从Java中的线程池中删除空闲线程?

来自分类Dev

在C#中在Console中的方法中创建线程失败

来自分类Dev

Java中的getDeclaredMethod失败

来自分类Dev

Flutter应用程序构建中的任务“:sms:verifyReleaseResources”的执行失败,并且线程“ main”中的异常java.lang.NullPointerException

来自分类Dev

ObjectInputStream 上的 java.io.StreamCorruptedException 同时将其包装在 Java 中的 CipherInputStream 上

来自分类Dev

了解Java中的多线程

来自分类Dev

Java中的多线程问题

来自分类Dev

Java中的多线程错误