2015-01-20 37 views
-1

所以我試圖在使用eclipse的java項目中進行服務器端客戶端設置。 細節或多或少不相關,除了我試圖來回傳遞一個HashMap對象。套接字和Hasmap對象

但是我能夠做到這一點,但是當服務器發送第一個HashMap(HM1)時,客戶端將採用HM1並採取相應的行動。然而,當另一個HashMap進來時,客戶端沒有收到HM2,而是HM1,儘管重複驗證服務器確實正在發送HM2對象。

我後來通過發送dos.ObjectOutputStream(HashMapObject.clone())而不是僅僅是dos.ObjectOutputStream(HashMapObject)解決了這個問題,現在客戶端獲得了正確的數據。

請記住,我只通過連接到本地主機進行測試進行調試。

現在我的問題是,我不明白爲什麼.clone()有所不同,有人可以向我解釋爲什麼?

+0

您對該問題的陳述不一致。 HM1,HM2和** HashMapObject ** !? – ultrajohn 2015-01-20 19:18:08

+0

我使用HM1和HM2作爲顯示發送內容和接收內容的方式。我使用HashMapObject作爲通用術語,用於描述我如何發送對象,因爲在描述我如何使用ObjectOutputStream方法時描述發送的內容並不重要。 – icomeinpieces 2015-01-21 15:55:49

回答

1

在寫入之間使用reset()方法在ObjectOutputStream之間。

如果最終一次寫入同一對象,此輸出流類型實際上會緩存它寫入的對象以節省帶寬。調用clone()會有所作爲,因爲它在發送之前複製對象。但是,輸出流也會緩存這些克隆的對象,這可能會很快成爲內存問題。

+0

不知道,我曾嘗試重置,但不明白高速緩存發生在哪裏,所以我試圖重置輸入流,現在我更好地瞭解重置對輸出流很好。謝謝(你的)信息。 – icomeinpieces 2015-01-21 15:57:10