#java #android #exception #exception-handling
#java #Android #исключение #обработка исключений
Вопрос:
Я загружаю длинные файлы с сервера Amazon S3. Я регистрирую исключения в своей базе данных сервера, если таковые возникают. Я вижу большое количество исключений java.net.SocketTimeoutException: время ожидания чтения истекло
Я думал, что это происходит, когда пользователь находится в плохом / плохом интернет-покрытии, но мне интересно, находится ли пользователь в плохой зоне покрытия, тогда почему он регистрируется на сервере?(Поскольку это также делается через Интернет). Кто-нибудь знает причину?
Строка, в которой это исключение возникает каждый раз, является
while ((numRead = InputStream.read(mBuffer)) >= 0)
Как я могу обработать это исключение? Я думаю, что когда возникает исключение, я должен снова попробовать без времени, например, 5 раз, вызвав
InputStream.read(mBuffer);
Правильно ли я думаю?
После того, как произойдет исключение времени ожидания чтения, inputstream будет действителен для повторного использования?
Будет ли вызов InputStream.read(mBuffer); будет возобновлен с последнего прочитанного потока?
Спасибо
Ответ №1:
Входной поток остается действительным, и буфер не содержит данных после истечения времени ожидания. Если вы получаете много таймаутов, я бы начал с увеличения периода ожидания. Удвойте его. И для начала должно пройти не менее 30-60 секунд, так как вам нужны все данные.
Комментарии:
1. Спасибо за ваше время. Не могли бы вы рассказать мне еще 1 вещь? Если возникло исключение, вызовет ли снова InputStream.read(mBuffer); будет возобновлен с последнего прочитанного потока?
2. @Arsian я ответил на это. «Буфер не содержит данных после истечения времени ожидания». Подумайте об этом. Вместо передачи каких-либо данных в ваш буфер произошел тайм-аут. Итак, не было никаких данных, поэтому он читал, поэтому нечего терять.
3. О да, я думал так же. Спасибо
4. Если я загружаю данные объемом 1 ГБ, то что мне делать, потому что я обнаружил ту же проблему