Android: SocketServer читает возвращение -1 в середине загрузки - PullRequest
0 голосов
/ 24 августа 2011

Я написал веб-сервер для Android.Поэтому вчера я хотел добавить к нему возможности загрузки.

    byte[] receivedBuffer = new byte[BUFFER_SIZE];
    BufferedInputStream bis = new BufferedInputStream(_client.getInputStream(), BUFFER_SIZE);

    int bytesRead = 0;

    while ((bytesRead = bis.read(receivedBuffer,0,BUFFER_SIZE)) != -1) {

        //do stuff with bytes

        if (bis.available() == 0) {
        break;
        }
    } 
// this point

Моя проблема в том, что когда я загружаю файлы, размер которых превышает 400 КБ, чтение возвращает -1 в середине загрузки файла.И если я смотрю на bis.available () в «этой точке», он все еще показывает> 0

, я пытался изменить

bytesRead = bis.read(receivedBuffer,0,BUFFER_SIZE)

на этот

bytesRead = bis.read(receivedBuffer)

Еще одна вещь, которую я попробовал, это понизить размер buffer_size, и он работал для файлов немного большего размера. Также я добавил thread.sleep чуть ниже if (bis.availabe () == 0 и снова немного помог. Это почти как bisвсе еще загружает данные из сетевого потока, когда я вызываю read, и в этот момент ничего не происходит, а затем он возвращает -1.

Мне нужна помощь, два дня я пытался заставить это работать.

1 Ответ

0 голосов
/ 06 сентября 2011

Решил этот.Я обрабатывал данные так быстро, что метод avaiable иногда возвращал 0, даже если на пути были какие-то данные.Так что я просто добавляю небольшое время, которое проверяет, доступно ли 0, и если оно спит некоторое время (10 мс) и если через секунду оно все еще доступно == 0, то оно выходит из строя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...