![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Привет!
Можно ли как-то узнать количество отправленных и неотправленных данных в текущий момент в стриме. Проблема возникла из-за того, что в сокет данные пишутся интенсивно, а вот отправляются медленно, а процесс надо как-то контролировать... Спасибо. -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 2 Всего: 118 |
Это сложно - если данные идут через какой-нибудь свитч, то там они могу застревать. И тут уже вряд ли что сделать можно.
|
|||
|
||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Ну мне хотя бы знать, сколько ушло просто в сеть. Ведь непременно сокет должен знать сколько у него еще данных на отправку записано...
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Есть такой вариант: написать адаптер для OutputStream, который будет реализовывать логику учёта количества переданных байт. Можно получить поток от сокета, установить его адаптеру (например методом setOutputStream(OutputStream os)) и используя методы адаптера посылать в поток данные. Т.е. адаптер выступает классом-прослойкой между потоком и остальной логикой, он делегирует большинство операций непосредственно OutputStream-у, но при этом навешивает способность учёта количества переданных байт. Поскольку интерфейсы у адаптера и OutputStream будут различаться (т.е. не все методы класса OutputStream будут объявлены в классе адаптера), то не стоит путать его с шаблоном декоратор (который в свою очередь обладает таким же (или расширяющим) интерфейсом что и "декарируемый" им класс). Впрочем и декоратор тут подойдёт, но как мне кажется его реализация будет несколько сложнее. вот некоторые ссылки: про адаптер, про декоратор |
|||
|
||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
У Jakarta commons-io, есть класс CountingInputStream, который считает количество переданных байт.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| powerOn |
|
||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
В самом примитивном варианте:
Интерфейс адаптера:
Реализация адаптера:
Пример использования:
|
||||||
|
|||||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
powerOn, в своем примере ты сделал чистую надстройку над OutputStream, которая просто считает сколько данных записано в стрим. Мой вопрос немного глубже, мне надо знать
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Верно.
Мне кажется в таком случае есть три варианта: 1) Использовать приведённый мной, но взять за правило, что все что записано в поток и за flush-но ушло клиенту, если никаких исключений не вылетело. 2) Опрашивать клиента с вопросом "сколько данных тебе пришло?" и сравнивать с тем сколько отправил. 3) Посмотреть класс CountingInputStream, который тебе посоветовал LSD. |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |