我在使用 ObjectInputStream 时遇到问题,并且已经为此苦苦挣扎了 2 天。我试图寻找解决方案,但不幸的是没有找到合适的答案。
我正在尝试编写一个客户端/服务器应用程序,其中客户端将对象(在本例中为配置类)发送到服务器。这个想法是连接在发送对象后保持 Activity 状态,因此可以在必要时发送新对象。
以下是我的客户端代码的重要部分:
mSocket = new Socket("192.168.43.56", 1234);
mObjectIn = new ObjectInputStream(mSocket.getInputStream());
mObjectOut = new ObjectOutputStream(mSocket.getOutputStream());
mObjectOut.writeObject(stubConfig);
mObjectOut.flush();
在上面的代码中,我省略了一些 try/catch block ,以保持代码对您的可读性。
服务器端如下所示:
mHostServer = new ServerSocket(port);
mSocket = mHostServer.accept();
// create streams in reverse oreder
mObjectOut = new ObjectOutputStream(mConnection.getOutputStream());
mObjectOut.flush();
mObjectIn = new ObjectInputStream(mConnection.getInputStream());
while (mIsSocketConnected)
{
StubConfig = (StubConfiguration)mObjectIn.readObject();
}
我想要实现的是,只要套接字连接处于 Activity 状态,服务器就会监听传入的配置对象。
但是,当我运行程序时,我在服务器端的 while 循环中收到了 EOFException。我在 while 循环的第一次迭代中收到第一个配置对象,没有任何问题,但之后每次调用 readObject() 时都会收到 EOFException 。
我正在寻找解决这个问题的方法。谁能引导我走向好的方向?
编辑:我读到的有关 EOFException 的内容是,当您想要在到达流末尾时从流中读取数据时,会抛出该异常。这意味着由于某种原因,流在对象发送后结束。有没有办法重新初始化流等等?
最佳答案
当对等方关闭连接时,
EOFException
由 readObject()
抛出。之后就再也不会有更多的数据了。 因此您根本无法写入多个对象:您而是关闭了连接。
关于java - 从 Java 中的 ObjectInputStream 中连续读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966311/