Java ContentLength在通过http请求读取时变为-1

Java ContentLength在通过http请求读取时变为-1,java,android,Java,Android,我正在android应用程序中读取从php文件返回的生成的xml输出,如下所示 URL u = new URL("http://www.abcdefg.com/hijklm/nopqr.php"); URLConnection uc = u.openConnection(); String contentType = uc.getContentType(); int contentLength = uc.getContentLength(); 在php文件中,xml是动态生成的。问题是当xml

我正在android应用程序中读取从php文件返回的生成的xml输出,如下所示

URL u = new URL("http://www.abcdefg.com/hijklm/nopqr.php");
URLConnection uc = u.openConnection();
String contentType = uc.getContentType();
int contentLength = uc.getContentLength();
在php文件中,xml是动态生成的。问题是当xml的大小增加时,contentLength的值变为-1。我观察到,当xml的大小增加超过7kb时,contentLength变量contain的值为-1

我推断它可能会超过页眉大小的限制,但不确定。谁能给我解释一下吗
读取大型xml内容时应该怎么做……。?

在客户端看到的内容长度是在服务器端的头中设置的长度。如果您看到
-1
,则表示答复中没有
内容长度
标题

我希望PHP端会尝试自动设置
内容长度。如果文档小于~7kb,则可以将其全部保存在缓冲区中,然后发送具有实际大小的标题。如果大于该值,则缓冲区将填满,输出代码将被迫发送不带内容长度的标头

有两种可能的方法来解决这个问题

  • 在客户端,如果内容长度报告为
    -1
    ,则可以忽略它。这仅仅意味着没有设置
    内容长度
    标题。即使您将另一端固定为始终设置标题,也应该这样做

  • 在服务器端,可能有一种方法可以告诉PHP使用特定的内容长度值


是否切换到?但Contentlength的值对我来说非常重要。。。因为我将基于contentlength值创建一个字节类型的数组,并执行一个循环来读取inputstream<代码>InputStream raw=uc.getInputStream();InputStream in=新的BufferedInputStream(原始);数据=新字节[contentLength];int字节读取=0;整数偏移=0;while((offset
有没有其他方法可以提前知道内容的大小……?没有,除了修改服务器以其他方式向您发送大小之外。简单的解决方案是将字节写入
ByteArrayOutputStream
您能提供任何链接(代码段)吗用于从InputStream对象在ByteArrayOutputStream中写入字节。。。。在事先不知道内容大小的情况下。。。。。。。。。。?