我的问题很简单,乍一看虽然不是。我的android应用程序使用方法writeObject()通过ObjectOutputStream(OOS)发送对象。 一切都很好,直到我试图在短时间内发送几个对象(看起来像那件事)。所以,想象,我不喜欢水木清华:ObjectOutputStream在一行中读取多个对象
服务器端:
public void someMethod(){
sendObjectA(objA);
sendObjectB(objB);
}
public void sendObjectA(ObjectA obj){
getObjectOutputStream().writeObject(obj);
getObjectOutputStream().flush();
}
public void sendObjectB(ObjectB obj){
getObjectOutputStream().writeObject(obj);
getObjectOutputStream().flush();
}
客户端
public void method read(){
while (true){
Object receivedObject = inputStream.readObject();
if (receivedObject instanceof ObjectA){
doAThings();
} else if (receivedObject instanceof ObjectB){
doBThings();
}
}
...捕获异常等
而且它发生在某种程度上是doAThings()方法永远不会被调用,它看起来更像是这个objectA永远不会来。
在调试过程中,我注意到,在我写入objA到流之后,程序开始向它写入objB(当然,很明显的行为,但是...)但客户端没有收到objA(我也尝试调试客户端)。我把一个断点在该行
Object receivedObject = inputStream.readObject();
而且只当它收到objB停止。
没有引发任何异常,logcat中没有错误(如nonSerializable等),没有任何异常。
另外我想补充一点,我不会那么满意接受某种解决方法。我真的很想了解问题的根源。我已经阅读了大量不同的教程,关于Java IO,流等的文档,但仍然不知道为什么会发生这样的事情。例如,flush()方法应该刷新任何写入的数据,即将其传递到目标点,但在我的情况下它不会。它看起来只是用新的数据覆盖以前写入的数据。
P.S.我也使用套接字,所以接收器 - 是通过Wi-Fi连接的设备
谢谢你的回答。那么,在我将它们写入流之后,我会立即刷新objectoutputstream。但是,你的意思是“你需要在构造它之后直接刷新()ObjectOutputStream”?你能解释一下这个是什么意思,它会是什么样子? –