gpt4 book ai didi

Android SHOUTcast 请求

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:15 25 4
gpt4 key购买 nike

我已经用 Java 编写了一些代码来解码 SHOUTcast 流并返回元数据。此代码按预期工作,但当我将其移植到 Android 时,相同的代码不起作用。具体来说,我似乎无法解析来自 SHOUTcast 服务器的 HTTP 响应 header 。在 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 中运行时,此代码会溢出“b​​yteheader”缓冲区。在 Android 之外运行时,它可以正常运行。更奇怪的是,我通过 Wireshark 嗅探了对话,并将 Android 发送的 header 回显到文件中。当使用 netcat 发出具有相同 header 的请求时,我得到了适当的响应。当我查看 Android 的 logcat 输出时,“byteheader”只包含垃圾。

我唯一的想法是,这是我忽略的环境问题。或者,我遗漏了一些非常明显的东西。

有什么想法吗?

作为编辑,我通过创建一个虚拟应用程序并仅将有问题的代码放入其中来进一步隔离问题。问题仍然存在,Android 返回垃圾,而我的相同外部代码按预期工作。我认为这可能与字符编码有某种关系,但看起来这两种环境都默认为 UTF8。

最佳答案

我终于将问题追溯到 URLConnection。显然,该类在我的本地 JVM 上的运行方式与在 Android 上的运行方式不同。在 Android 之外,URLConnection 保持响应 header 不变。在 Android 中,响应 header 被使用,输入流从数据的第一个字节开始。 header 信息可通过 getHeaderField 获得。

我不确定我是否理解这种行为差异,我只能将其归因于 Java 版本的差异。

关于Android SHOUTcast 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4273207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com