Недавно я задал этот вопрос на SO: Grabbing JSON works from one link, not from anotherПодсчет длины JSON в Android
я получил ответ, в основном о том, что getContentLength
не является обязательным на сервере, так что я должен был бы вручную посчитать длину самостоятельно. Ну, мне потребовалось некоторое время, но я придумал какой-то код, который, похоже, получил правильный счет, но я не уверен, что это правильный способ сделать это. В основном из-за моего заявления while(0==0)
.
Точный ответ я получил:
контентного длина заголовка задается отвечающему сервером. Это необязательно, и Google не хочет отправлять его для динамически генерируемого контента (большинство серверов этого не делают). Поэтому вам нужно будет прочитать поток до тех пор, пока не выберете байты, а не сделайте это за один раз.
Так что это мой код, который я придумал:
Reader reader = new InputStreamReader(inputStream);
int contentLength=0;
int cur;
while (0==0){
cur = reader.read();
if (cur == -1) {
break;
} else {
contentLength++;
}
}
ли это, кажется, как жизнеспособное решение для подсчета длины контента, если сервер не дает вам один?
Лучше заменить while (0 == 0) с while (true), но зачем вам нужен размер вообще. Вы не можете получить размер без чтения всех данных. – MTilsted
Если вы читаете мой другой вопрос, я просто пытаюсь получить данные JSON, но способ, которым я занимаюсь, теперь требует длины содержимого. Вы видите лучший способ? – EGHDK
Если вы используете существующую библиотеку парсеров JSon, то эта библиотека, скорее всего, получила метод, который может анализировать Json непосредственно из потока. Но если вы попытаетесь написать свой собственный json-анализ (Why ???), взгляните на http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string – MTilsted