解析巨人json的反应

时间:2015-03-09 16:44:35

标签: java json apache-commons-httpclient

首先是背景信息: 我正在使用commons httpclient向服务器发出get请求。 服务器响应json字符串。 我使用org.json解析字符串。

问题: 实际上一切正常,即小响应(小于2 ^ 31字节=限制getResponseBody和stringbuilder的整数的最大值)。另一方面,我有一个巨大的反应(超过几GB),我陷入困境。我尝试使用httpclient的“getResponseBodyAsStream”,但响应非常大,我的系统卡住了。我尝试使用String,一个Stringbuilder,甚至将它保存到文件中。

问题: 首先,这是正确的方法,如果是这样,处理这种反应的最佳方法是什么?如果没有,我该怎么办?

1 个答案:

答案 0 :(得分:2)

如果你有一个可以是GB因子的响应,你应该逐个字符地解析json作为流(几乎)并避免创建任何String对象...(它非常重要,因为java stopTheWorld垃圾收集会导致你的如果你不断创造大量的垃圾,系统会自由停留几秒钟)

您可以使用SAXophone创建解析逻辑。

你必须实现所有方法,如onObjectStart,onObjectClose,onObjectKey等......一开始很难,但是一旦你在测试包中看一下PrettyPrinter的实现,你就会有这个想法。

一旦正确实施,您可以处理无限的数据流;)

P.S。这是专为HFT而设计的所有关于性能而且没有垃圾......