从抛出 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
不,你不是。
我会尽量简单地说。
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
不,你不是。