![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
uranpro |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 571 Регистрация: 7.5.2008 Где: Moscow city Репутация: нет Всего: 1 |
Доброго времени суток.
Пишу приложение для своего телефона, нужно отправить\принять, допустим, ~2000 байт. BUFFER_SIZE = 1024; Я столкнулся с такими проблемами, когда начал тестить на реальном телефоне(хотя на эмуляторе все работало): 1. не читает из потока
2. после решения 1 проблемы, не читает до конца, т.е. первый раз считал 1024, а оставшиеся 976 не хочет. Лазил по форумам, ничего не нашел. Решение 1. перед чтением проверяем, есть ли байты для чтения
2. если данных для чтения осталось меньше BUFFER_SIZE, то используем перегруженный метод read
может кому понадобится =) -------------------- I want a perfect soul |
||||||
|
|||||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Вот тут дан ответ почему у тебя могут быть ошибки при работе (проблема 1).
Процитирую: Решение проблемы 1 скорее всего будет решением проблемы 2. Добавлено через 7 минут и 4 секунды Вот что в доке по InputStream.available() сказано:
1) InputStream.available() всегда возвращает 0. 2) available() "should be overridden" что переводится как "не плохо было бы если бы наследники InputStream переопределили этот метод", но это не значит, что метод 100% переопределен в наследнике. Это сообщение отредактировал(а) eugine_s - 29.7.2010, 13:11 |
|||
|
||||
uranpro |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 571 Регистрация: 7.5.2008 Где: Moscow city Репутация: нет Всего: 1 |
спасибо!
посему в доках по InputStream.read(b) написано
??? -------------------- I want a perfect soul |
|||
|
||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Часть данных еще может быть не получена.
Например, ты подключился к серверу, он тебе в ответ начинает слать какие-то данные. Шлет он их пачками/блоками (например, по 1024). Телефон может получить уже часть (блок) байт и ожидает прихода следующей части, а ты в это время вызываешь read(). Что тебе должна JVM в этом случает вернуть? "-1" - это не правильно, ведь еще не все данные пришли. сразу выбросить exception - тоже не правильно (exception только через некоторое время выбрасывается - по прохождению какого-то времени). Поэтому твой вызов блокируется, пока не поступят данные. Метод available() и "This method blocks until input data is available" - это про разные available идет речь. |
|||
|
||||
uranpro |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 571 Регистрация: 7.5.2008 Где: Moscow city Репутация: нет Всего: 1 |
это TCP, -1 выдаст при отключении, Exception при разрыве. если бы я хотел такой геморрой, то использовал бы UDP) avalible тут не причем, я про read "блокирует поток до тех пор, пока данные не становятся доступными". было бы замечательно, если бы выкидывал Exception, тем самым намекая в чем проблема... благо, что пакеты приходят поочередно)))
Это сообщение отредактировал(а) uranpro - 30.7.2010, 10:22 -------------------- I want a perfect soul |
|||
|
||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Ну расскажи тогда, как ты делаешь в C#, когда начал читать из сокета (т.е. сокет сказал что готов к чтению), прочитал, грубо говоря, половину данных, а остальные данные еще не пришли? Усыпляешь поток или забиваешь на остальные данные?
Зачем вообще с j2me связался ![]() Это сообщение отредактировал(а) eugine_s - 30.7.2010, 10:44 |
|||
|
||||
uranpro |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 571 Регистрация: 7.5.2008 Где: Moscow city Репутация: нет Всего: 1 |
)) ну с j2me связался из-за моего телефона Nokia 6233 )))
хочу написать для себя клиент удаленного торрента. пока едешь/идешь(в метро) домой, поставил на скачку фильм и готово, ждать не нужно и, если забудешь, вспоминать не надо... про C# я немного загнул, это обработка API WinSock WinSock errors обработка WSAEWOULDBLOCK
Асинхронное чтение
этот код залочит поток, если нет данных, -1 если сокет отключился(-или)
-------------------- I want a perfect soul |
||||||
|
|||||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |