java - 使用 Streams 和 Gson 将作为 ResultSet 读取的大量数据库转换为 JSON 字符串的最佳方法?
问题描述
我有一个来自 DB 对象的大结果,我想将其转换为 json 字符串并作为消息传递给 pubsub。我是 Java 8 流的新手,我不知道使用它的最佳方法是什么。我通常使用
new Gson().toJson(myArrayList.toArray(), T[].class)
,但我想避免在内存中存储大对象,因此避免将 ArrayList 作为建议的答案之一。
解决方案
鉴于您的 arraylist 已经是一个巨大的对象,您试图避免的是,最坏的情况是 2 倍的常数因子(您需要 2 倍您现在已经需要的内存)。换句话说,在这里尝试流式传输 JSON 是没有意义的。
如果您有一个从某个地方一次读取一个的对象流(例如,您正在遍历数据库结果集并将每个“行”转换为一个对象,例如使用 JOOQ 或 JDBI 或休眠),并且您想要发送这些是通过 JSON 输出的),那么你想要的就很有意义了。
换句话说,建议是:不要打扰,你不会得到任何有用的东西。如果你想花时间让这段代码占用更少的内存,那么回到最终生成一个巨大数组列表的代码并将其更改为一个流(小写的 s。可能是一个实际的 java.util.stream。流,但更可能是迭代器或只是不同的代码结构)。
然后才担心 JSON 部分。完成此操作后,请调查有关流式传输 GSON 的此 wiki 页面。
推荐阅读
- javascript - ajax - 如何在不占用大量虚拟内存的情况下使用 Ajax 和 settimeout 建立聊天?
- python - TensorFlow:在Tensorflow中覆盖了python中的所有基本操作
- node.js - 在标头中传递 jwt
- css - Ionic 3-如何设置带有滚动内容的固定背景图像?
- angular - ngClass 从一串类中只加载一个类
- dart - Flutter image_picker post上传图片
- android - 改变或获取当前的振动强度或进行有力的振动
- angularjs - 如何通过 Angularjs 服务发送对象和数组
- java - 实例 A = 实例 B,这究竟是做什么的?
- javascript - 如何从 HTML 文件中的外部网页获取 DIV 元素?