Java входной поток буферизует объект? - PullRequest
4 голосов
/ 08 мая 2011

У меня есть клиент-серверное приложение, где сервер отправляет всем клиентам список всех клиентов каждый раз, когда присоединяется новый клиентский сокет.Проблема в том, что когда новый клиент присоединяется, он получает правильный список, но старые клиенты получают старый список, который они получили при присоединении к себе.Вроде как они берут один и тот же объект из входного потока каждый раз.

Можно ли как-то очистить входной поток?

Чтение объекта:

while((inObject = in.readObject()) != null) {
   ...
}

Отправкаобъект:

out.writeObject(object);

Ответы [ 2 ]

6 голосов
/ 08 мая 2011

ObjectOutputStream.reset() - это то, что вы ищете.

Это также предотвратит нехватку памяти, что в противном случае могло бы произойти. Причина в том, что классы ObjectInput / OutputStream кэшируют все объекты, которые были отправлены через них, что также предотвращает сбор мусора этими объектами. Это необходимо для работы с циклическими ссылками, а также повышает производительность, когда объекты отправляются несколько раз.

2 голосов
/ 08 мая 2011

Я подозреваю, что проблема в том, что вы модифицируете существующие объекты, а затем повторно используете существующие ObjectOutputStream. Вызовите reset на ObjectOutputStream, чтобы эффективно очистить кэш ссылок на потенциально измененные объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...