2015-01-20 4 views
-1

Так что я пытался настроить сервер-клиент в проекте java с использованием eclipse. Подробности более или менее несущественны, за исключением того, что я пытался передать объект HashMap взад и вперед.сокеты и объекты Hasmap

Я могу сделать именно это, однако, когда сервер отправил первый HashMap (HM1), клиент будет принимать HM1 и действовать соответственно. однако, когда появился другой HashMap, клиент не получил HM2, но вместо HM1, несмотря на неоднократные проверки того, что сервер действительно отправил объект HM2.

Впоследствии я решил проблему, отправив dos.ObjectOutputStream (HashMapObject.clone()) вместо просто dos.ObjectOutputStream (HashMapObject), и теперь клиент получает нужные данные.

помните, что я тестировал только подключение к localhost для отладки.

теперь мой вопрос, я не понимаю, почему .clone() сделал разницу, может кто-нибудь объяснить мне, почему?

+0

Ваше сообщение о проблеме несовместимо. HM1, HM2 и ** HashMapObject ** !? – ultrajohn

+0

Я использовал HM1 и HM2 как способ показать, что было отправлено и что было получено. Я использовал HashMapObject как общий термин, когда я описывал, как я отправлял объект, поскольку это не важно при описании того, что было отправлено при описании того, как я использовал метод ObjectOutputStream. – icomeinpieces

ответ

1

Используйте метод reset() на странице ObjectOutputStream между письмами.

Этот тип потока вывода фактически кэширует объекты, которые он написал, чтобы сэкономить пропускную способность, если вы в конечном итоге пишете один и тот же объект более одного раза. Вызов clone() имеет значение, потому что он дублирует объект перед отправкой. Однако выходной поток также кэширует те клонированные объекты, которые могут быстро стать проблемой памяти.

+0

Полезно знать, я попробовал сброс, но не понял, где происходит кеширование, поэтому я пытался сбросить поток ввода, теперь, когда я лучше понимаю, что сброс хорошо работает для выходного потока. Спасибо за информацию. – icomeinpieces

Смежные вопросы