как обрабатывать исключение ReadTimOut при чтении данных с сервера?

#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 ГБ, то что мне делать, потому что я обнаружил ту же проблему