我的問題很簡單,乍一看雖然不是。我的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」?你能解釋一下這個是什麼意思,它會是什麼樣子? –