![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| untied |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.7.2010 Репутация: нет Всего: нет |
Приветствую.
Сразу скажу, что туториалы и примеры по java.nio (в т.ч. The Rox Java NIO) я читал. Интересует следующее: 1. Во всех туториалах предполагается, что размер принимаемого сервером пакета заведомо меньше размера буфера. Соответственно разик прочитали в буфер, получили пакет. А что делать, если размер пакета может быть больше размера буфера? Допустим, кто-то шлет файло на несколько мегабайт. Как это склеивать? 2. Как отслеживать таймаут? Допустим, прочитали в буфер, отослали этот буфер в поток-склеиватель пакетов. Как прекратить сборку пакета, если превышено время ожидания? |
|||
|
||||
| Kircul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: нет Всего: 7 |
Можно сразу пример кода, который не понравился?
|
|||
|
||||
| untied |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.7.2010 Репутация: нет Всего: нет |
Ну почему не понравился? Мне все нравится. Просто найденные примеры не годятся для моей задачи.
__h t t p : / / rox-xmlrpc.sourceforge.net/niotut/ __h t t p : / / habrahabr.ru/blogs/java/70690/ В обоих примерах предполагается, что размер входящего пакета меньше размера буфера. Соответственно, одно чтение -- один пакет, таймаут не нужен. У меня размер входного пакета может быть несколько мегабайт (до сотни). Делать буфер такого размера нерентабельно (да Java и не даст). Соответственно, пакет нужно собирать по кускам. Но как? |
|||
|
||||
| Kircul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: нет Всего: 7 |
Исходя из кода тут, метод read нужно модифицировать примерно так:
Как-то так оно должно принять полный пакет. |
|||
|
||||
| COVD |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Вовсе нет. Данные из сети поступают любыми порциями, но в буфер за один раз будет прочитано не больше, чем там (в буфере) есть свободного места. http://download.oracle.com/docs/cd/E17476_...nio.ByteBuffer)
Вообще, если мало (сотни) клиентов обмениваются с сервером большими обьемами данних, то возможно проще и эффективнее использовать IO (один клиент - один блокируюший поток). NIO (много клиентов - один неблокируюший поток) выгоден, когда много (тысячи) клиентов эпизодически (т.е. со значительными паузами) обмениваются мелкими порциями данных. |
||||
|
|||||
![]()
|
| Правила форума "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. |