java - 解析巨大的 json 响应

标签 java json apache-commons-httpclient

首先是背景信息: 我正在使用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/

相关文章:

java - 如何处理登录页面中单击时 Selenium 报告为 "NOT visible"的 Web 元素

java - 错误:com. mysql.jdbc.MysqlDataTruncation:数据截断:截断不正确的DOUBLE值:通过删除

PHP mysql_fetch_object,所有属性都是字符串?

javascript - json声明后未定义的js数组

java - 使用非常规方案获取重定向请求的最终 URL

JavaFx ComboBox valueProperty().addListener(new ChangeListener<String>() 逐步重复

java - 将国际字符从 MySQL 输出到 Java/Android

java - 如何将这个 JSON 保存到 mongoDB 中?

Java HTTP 发布原始数据

java - 请求以 Http/0.9 版本发送