0

我正在尝试使用缓冲读取器读取 JSON 响应,如下所示。我正在使用 Apache Commons Http 客户端。响应以单行 JSON 形式出现,字符数约为 1060000,大小约为 1 MB。我面临的问题是只有部分流被阅读器读取,而其他部分丢失。如何在不丢失任何数据的情况下读取完整的 JSON。?这与 BufferedReader 的 'CharBufferSize' 或流中没有字符有关吗?

InputStream stream = method.getResponseBodyAsStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    builder.append(line);
}
4

3 回答 3

0

如果您只想将完整的流复制到 中StringBuilder,则应使用InputStreamReaderchar-array 缓冲区。

InputStream stream = method.getResponseBodyAsStream();

InputStreamReader reader = new InputStreamReader(stream, "UTF-8");
StringBuilder builder = new StringBuilder();

char[] buffer = new char[4096];
int read;
while ((read = reader.read(buffer)) != -1) {
    builder.append(buffer, 0, read);
}
于 2013-10-10T16:02:04.273 回答
0

最后我能够使用Apache Commons 库中的IOUtils来解决。这是代码。

BoundedInputStream boundedInputStream= new BoundedInputStream(stream);
BufferedReader reader = new BufferedReader(new InputStreamReader(boundedInputStream,"UTF-8"));

StringBuilder builder= new StringBuilder();
StringBuilderWriter writer = new StringBuilderWriter(builder);

IOUtils.copy(reader, writer);

虽然已经有一段时间了,但它可能对某人有所帮助。

这是原始来源使用 Java 读取文件或流的最强大的方式(防止 DoS 攻击)

于 2014-01-08T18:09:12.130 回答
0

尝试使用 json 解析器。

    import org.codehaus.jackson.*;

    JsonFactory fac = new JsonFactory();
    JsonParser parser =  fac .createJsonParser(stream);
于 2013-10-10T09:56:25.503 回答