Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > метод HttpServletResponse.getOutputStream()


Автор: UnicornMirage 24.2.2006, 00:59
у класса HttpServletResponse есть метод getOutputStream ктоорый возвращает ссылку на поток данных.

вот вопрос такой - при вызове метода HttpServletResponse.getOutputStream метод создает поток и возвращает на него ссылку, либо поток уже создан и метод возвращает только лишь ссылку на него.

Я провел небольшой эксперимент для одного и тогоже объекта response, типа такого:
Код

OutputStream os = response.getOutputStream(); //первый вызов метода

String msg = "os hachcode=" + os.hashCode();   
os.write(msg.getBytes());

OutputStream os2 = response.getOutputStream(); //повторный вызов метода
os2.write(("os hachcode=" + os2.hashCode()).getBytes());

os.flush();


в этом примере возвращается одинаковый хеш-код клиенту.
вопрос - в обоих случаях происходит работа с одним и тем же потоком?

соответственно второй вытекающий вопрос - один и тот же hash-code объекта в яве - является ли это гарантией чтообъект один и тотже?

PS: использую сервер Resin 3.0.17

Автор: LSD 24.2.2006, 01:17
Цитата(UnicornMirage @ 24.2.2006, 00:59 Найти цитируемый пост)
соответственно второй вытекающий вопрос - один и тот же hash-code объекта в яве - является ли это гарантией чтообъект один и тотже?

Нет, объект может переопределять метод hashCode(). У двух объектов у которых один и тот же хэш код, equals() может возвращать false. Единственная гарантия это ==.

Хотя применительно к потокам, скорее всего это один и тот же поток, т.к. они как правило не переопределяют hashCode() и equals().
Добавлено @ 01:20
Да и по смыслу это должен быть один и тот же поток.

Автор: UnicornMirage 24.2.2006, 01:42
кстати попробовал закрыть поток а потом снова вызвать метод HttpServletResponse.getOutputStream, он возвратил значение null, можно сделать вывод что поток единственный.

почему вообще я задавал подобные вопросы - потому что столкнулся с задачей - где хранить ссылку на поток для клиента, которую используют несколько серверных компонентов для отправки данных. теперь ясно что хранить дополнительную ссылку не нужно, т.к. она существует и возвращается из метода HttpServletResponse.getOutputStream.
спасибо всем за проявленное внимание!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)