首先是背景信息: 我正在使用commons httpclient向服务器发出 get 请求。 服务器响应 json 字符串。 我使用 org.json 解析字符串.
问题: 实际上一切都有效,这是针对小响应(小于 2^31 字节 = 限制 getResponseBody 和字符串生成器的整数的最大值)。另一方面,我有一个巨大的响应(超过几个 GB),但我陷入了困境。我尝试使用 httpclient 的“getResponseBodyAsStream”,但响应太大,导致我的系统卡住了。我尝试使用 String、Stringbuilder,甚至将其保存到文件中。
问题: 首先,这是正确的方法吗?如果是,处理此类响应的最佳方法是什么?如果没有,我该怎么办?
最佳答案
如果您收到的响应可能是 GB 的系数,您应该将 json 逐个字符地解析为流(几乎)并避免创建任何 String 对象...(这非常重要,因为 java stopTheWorld 垃圾收集将导致您的如果您不断创建大量垃圾,系统会释放几秒钟)
您可以使用SAXophone创建解析逻辑。
您必须实现所有方法,例如 onObjectStart、onObjectClose、onObjectKey 等...一开始很难,但是一旦您查看测试包中 PrettyPrinter 的实现,您就会有想法...
一旦正确实现,您就可以处理无限的数据流;)
附注这是为 HFT 设计的,所以它的全部内容都是性能而不是垃圾......
关于java - 解析巨大的 json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28947366/