【发布时间】:2016-02-01 16:42:35
【问题描述】:
乍一看,我的问题很简单,但事实并非如此。我的 android 应用程序使用方法 writeObject() 通过 ObjectOutputStream (OOS) 发送对象。 一切都很好,直到我尝试在短时间内发送几个对象(看起来很重要)。所以,想象一下我会喜欢:
服务器端:
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() 方法应该刷新任何写入的数据,即 DELIVER 将其发送到目标点,尽管在我的情况下它没有。看起来它只是用新的数据覆盖以前写入的数据。
附:我也在使用插座,所以接收器 - 是通过 Wi-Fi 连接的设备
【问题讨论】:
标签: java android sockets serialization objectoutputstream