Java 从引发EOFEException的套接字创建ObjectInputStream

Java 从引发EOFEException的套接字创建ObjectInputStream,java,sockets,objectinputstream,datainputstream,eofexception,Java,Sockets,Objectinputstream,Datainputstream,Eofexception,我会尽量简单地说 类构造函数“B”正在接收套接字作为参数,它来自类“a”。在A中,套接字用于使用DataInputStream和DataOutputStream进行I/O。套接字和流均未被A关闭 然后,在B中,我尝试从同一套接字创建ObjectInputStream,但我在OIS中得到一个空引用,并且抛出了EOFEException。我不知道为什么会这样。也许我不能在不同类型的流中重用套接字 我读过很多相关的问题,但没有一个是带插座的。吼叫一些代码 public HiloLoginHandler

我会尽量简单地说

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

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

我读过很多相关的问题,但没有一个是带插座的。吼叫一些代码

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
,因为显然不会发送任何对象

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

我在OIS中得到一个空引用


不,你不是。

在我看来,这不像Java。EOFEException表示套接字的读取部分已经关闭。为什么会这样?如果你想得到帮助,你必须愿意拿出一份报告。