Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Некоректные данные из интернета 
V
    Опции темы
Brodyaga
Дата 28.4.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Всем добрый день! Получаю трафик из интернета.. На эмуляторе всё ок! получается всё что надо и всё коректно! Скачиваю я с сервера 522 байта. На телефоне же (Sony Ericsson w300i) скачивается 270 байт, а остальные 252 байта приходят некоректные! В чём дело мож кто знает или сталкивался? Может в настройках телефоначто поменять надо? скачивал я и скопом сразу все:
Код

        byte[] buffer=new byte[522];
        turboDataInputStream.read(buffer,0,522);


И по 18 байт(так как в нужных 522 байтах содержица 29 сущностей по 18 байт)
Код

        byte[] tempBuff=new byte[18];
        for(int j=0;j<29;j++)
        {
            turboDataInputStream.read(tempBuff);

            for(int i=0;i<18;i++)
                buffer[j*18+i]=tempBuff[i];
                }


Всеровно не получается... на эмуляторе всё ок, а на телефоне только 270 байта правильно скачивается... Помогите плиз
PM MAIL   Вверх
math64
Дата 28.4.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Проверь результат read(). Возможно, не все байты ещё пришли и нужно повторить вызов read() для получения остальных байтов.
PM   Вверх
Brodyaga
Дата 28.4.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



А как проверить?

Это сообщение отредактировал(а) Brodyaga - 28.4.2008, 15:12
PM MAIL   Вверх
Dancer
Дата 28.4.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



Код


    private byte[] readBytesFromInputStream(final InputStream is) {
        byte[] buf;
        try {
            int offset = 0;
            int readBytes = is.available();
            buf = new byte[readBytes];
            while (is.read(buf, offset, readBytes) != -1) {
                System.out.println("can read bytes from server: "+ readBytes);
                readBytes = is.available();
                if (readBytes ==  0) {
                    readBytes = 1;
                }
                if(readBytes < 0) {
                    System.out.println("Error. readBytes < 0: readBytes = "+readBytes);
                } else {
                    byte [] tmp = new byte[buf.length];
                    System.arraycopy(buf,0,tmp,0,buf.length);
                    buf = new byte [buf.length + readBytes];
                    System.arraycopy(tmp,0,buf,0,tmp.length);
                    offset = tmp.length;
                }
            }
        } catch(Exception e) {
            System.out.println("Not occured exception: " + e.toString());
        }
        showArrayAsHex(buf);
        return buf;
    }

    private void showArrayAsHex(final byte[] mas) {
        for(int i =0; i < mas.length; i++) {
            if(i%10) {
                System.out.println();
            }
            System.out.print("0x" + Integer.toHexString(mas[i])+" ");
        }
    }



Это сообщение отредактировал(а) Dancer - 28.4.2008, 15:35


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
math64
Дата 29.4.2008, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



В данном случае ты знаешь сколько байт читать. Всё проще:
Код

    int len = 522;
    byte[] buf = new byte[len];
    int start = 0;
    while (len > 0) {
      int cnt = is.read(buf, start, len);
      if (cnt < 0 && start == 0)
        throw new EOFException(); // конец файла - ничего не прочли
      if (cnt <= 0)
        break; // прочли не всё - конец файла start;
      start += cnt;
      len -= cnt;
    }


PM   Вверх
Brodyaga
Дата 30.4.2008, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Спасибо! Всё получилось! Теперь корректные данные принимаются.
Только вот одно условие у math64 не понял:
Код

      if (cnt < 0 && start == 0)
        throw new EOFException(); // конец файла - ничего не прочли


Почему start == 0, а если я хочу в начало массива писать? Наверно имелось ввиду len==0? Тогда зачем тут  
ещё и cnt<0 ведь если len==0 то смысла читать дальше нет и уже не важно меньше нуля cnt или нет, тем более что он проверится в следующем условии:
Код

      if (cnt <= 0)
        break; // прочли не всё - конец файла start;

PM MAIL   Вверх
math64
Дата 30.4.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Это если ты хочешь разичать исловия - ничего не прочитал или прочитал сообщение частично
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.