Я написал некоторый код на Java, который будет декодировать поток SHOUTcast и возвращать метаданные. Этот код работает как задумано, но когда я портирую его на Android, тот же код не работает. В частности, я не могу разобрать заголовок ответа HTTP с сервера SHOUTcast. Там, где я могу просто разобрать его вне Android, мне кажется, что я получаю только мусор, когда запрос выполняется через Android.
Соответствующий код следует.
URL u = new URL("http://scfire-mtc-aa01.stream.aol.com:80/stream/1074");
URLConnection uc = u.openConnection();
uc.addRequestProperty("Icy-MetaData", "1");
InputStream in = uc.getInputStream();
byte[] byteheader = new byte[512];
int c = 0;
int i = 0;
int metaint = 0;
while ((c = in.read()) != -1){
byteheader[i] = (byte)c;
if (i > 4){
if (byteheader[i - 3] == '\r' &&
byteheader[i - 2] == '\n' &&
byteheader[i - 1] == '\r' &&
byteheader[i] == '\n')
break;
}
i++;
}
При запуске в Android этот код переполняет буфер "byteheader". При запуске вне Android, он работает правильно. Чтобы сделать вещи более странными, я понюхал разговор через Wireshark и повторил заголовок, отправленный Android, в файл. При использовании netcat для запроса с тем же заголовком я получаю соответствующий ответ. Когда я смотрю на вывод logcat Android, «byteheader» содержит только мусор.
Моя единственная идея в том, что это что-то экологическое, что я пропускаю Или я упускаю что-то невероятно очевидное.
Есть идеи?
В качестве редактирования я дополнительно изолировал проблему, создав фиктивное приложение и поместив в него только код, вызывающий проблемы. Проблема сохраняется: Android возвращает мусор, а мой внешний код работает как положено. Я думал, что это может быть как-то связано с кодировкой символов, но похоже, что обе среды по умолчанию используют UTF8.