我会试着简单地说。
类构造函数"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
}
下定决心。在一端使用DataOutputStream
,在另一端使用ObjectInputStream
将永远行不通。您必须使用互补流。
在这种情况下,使用DataInputStream
而不是ObjectInputStream
,因为显然不会发送任何对象。
为什么在对等方已经关闭连接时打开输入流是另一个谜。如果对等方从不发送任何东西,为什么要打扰?
我在 OIS 中得到一个空引用
不,你不是。