从抛出 EOFException 的套接字创建 ObjectInputStream

Creating ObjectInputStream from Socket throwing EOFException

我会尽量简单地说。

Class 构造函数 'B' 正在接收一个套接字作为参数,它来自 class 'A'。在A中,套接字用于I/O使用DataInputStream和DataOutputStream。套接字和流都没有被 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
} 

下定决心。在一端使用 DataOutputStream 而在另一端使用 ObjectInputStream 将永远行不通。你必须使用补充流。

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

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

i am getting a null reference in the OIS

不,你不是。