getContentLength返回1225,实际长度3365

时间:2013-12-15 20:40:10

标签: java android json https

我目前正在使用android,我正在使用带有一些标头的http连接(我没有包含它们或出于安全目的的真实URL)从API获取JSON响应,并将该响应反馈回应用程序。我遇到的问题是,当使用http请求的getContentLength方法时,返回错误的长度(返回的错误长度为1225,JSON数组的正确字符长度为3365)。

我觉得当我的阅读器开始阅读它时JSON没有完全加载,因此只是在那时读取加载的JSON。有没有办法解决这个问题,可能是在HTTP连接上使用延迟还是等到它完全加载才能读取数据?

            URL url = new URL("https://www.exampleofurl.com");
            HttpURLConnection request = (HttpURLConnection) url.openConnection();               

            request.connect();
            int responseCode = request.getResponseCode();   

            if(responseCode == HttpURLConnection.HTTP_OK) {

                InputStream inputStream = request.getInputStream();
                InputStreamReader reader = new InputStreamReader(inputStream);

                long contentLength2 = Long.parseLong(request.getHeaderField("Content-Length"));

                Log.i("contentLength: ", "Content: " + contentLength2);

1 个答案:

答案 0 :(得分:0)

我一般不建议总是依赖“内容长度”,因为它可能不可用(你得到-1),或者可能受中间代理的影响。

为什么不直接读取你的流,直到它耗尽到内存缓冲区(比如StringBuilder)然后得到实际大小,例如:

BufferedReader br = new BufferedReader(inputStream); // inputStream in your code
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
    sb.append(line); 
}
// finished reading
System.out.println("data size = " + sb.length());
JSONObject data = new JSONObject(sb.toString());

// and don't forget finally clauses with closing streams/connections