【问题标题】:Creating ObjectInputStream from Socket throwing EOFException从抛出 EOFException 的 Socket 创建 ObjectInputStream
【发布时间】:2018-05-10 19:27:23
【问题描述】:

我会尽量简单地说。

类构造函数“B”正在接收一个套接字作为参数,它来自类“A”。在 A 中,套接字用于使用 DataInputStream 和 DataOutputStream 进行 I/O。套接字和流都没有被 A 关闭。

然后,在 B 中,我尝试从同一个套接字创建一个 ObjectInputStream,但我在 OIS 中获得了一个空引用,并且抛出了 EOFException。我不知道为什么会这样。也许我不能用不同类型的流重用套接字。

我已经阅读了许多相关的问题,但没有一个与套接字有关。下面是一些代码。

public HiloLoginHandler(Socket _socket) { // this is class 'A'
    socket = _socket;
        bytesOut = new DataOutputStream(socket.getOutputStream());
        bytesIn = new DataInputStream(socket.getInputStream());

}

public ClientInputHandler(Socket _socket) { // This is Class 'B'
        socket = _socket;

        InputStream is= socket.getInputStream();    
        ObjectInputStream in= new ObjectInputStream(is); // EOFException here
} 

【问题讨论】:

  • 在我看来这不像 Java。
  • EOFException 表示套接字的读取部分已经关闭。为什么会这样?如果您需要帮助,您必须愿意提供MCVE

标签: java sockets objectinputstream datainputstream eofexception


【解决方案1】:

下定决心。在一端使用 DataOutputStream 和在另一端使用 ObjectInputStream 将永远无法工作。您必须使用互补流。

在这种情况下使用DataInputStream 而不是ObjectInputStream,因为显然不会发送任何对象。

为什么在对等点已经关闭连接时打开输入流是另一个谜。如果对等方从不发送任何内容,为什么还要麻烦?

我在 OIS 中得到一个空引用

不,你不是。

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多