如何从Android中的HTTP获取巨大的JSON数据?

时间:2013-11-29 12:22:21

标签: android httpresponse

这是我的代码,我的字符串line没有读取整个回复:

    int bufferSize = 10240 ; // 10KB.
    BufferedReader reader = new BufferedReader(new InputStreamReader(inStream),bufferSize);
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();

先谢谢

2 个答案:

答案 0 :(得分:0)

您应该使用String获得sb.toString()的完整回复。

如果要将结果直接存储到文件中,可以使用以下内容:

private void storeToFile(InputStream input, String destFilename) {
    FileOutputStream fos = null;
    try {
        byte[] buffer = new byte[2048];
        fos = new FileOutputStream(destFilename, false);

        int read = 0;
        while (read >= 0) {
            if (read > 0) {
                fos.write(buffer, 0, read);
                fos.flush();
            }
            read = input.read(buffer, 0, buffer.size());
        }
    } catch (Exception ex) {
        Log.e(getClass().getName(), "error saving stream", ex);
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (Exception ex) {
            }
            fos = null;
        }
    }
}

当然,您也可以在SQLite中将响应存储为blobString,但我宁愿使用openFileOutput(destFilename, Context.MODE_PRIVATE)而不是new FileOutputStream(destFilename, false)将响应存储为私有文件。然后,您可以将文件名存储在SQLite数据库中。这使SQLite-DB文件更小,您的查询将更快。但是您无法在查询中使用您的响应文本作为过滤器。

答案 1 :(得分:0)

您应该尝试GZIPInputStream来解决此类问题。

http://developer.android.com/reference/java/util/zip/GZIPInputStream.html