使用Streams和Gson将作为ResultSet读取的大量数据库转换为JSON字符串的最佳方法是什么?

shyt4zoc  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(158)

我有一个来自DB对象的大型结果,我想将其转换为一个json字符串,并作为消息传递给pubsub。我是Java 8流的新手,我不知道什么是使用它的最佳方式。我通常使用new Gson().toJson(myArrayList.toArray(), T[].class),但我想避免在内存中存储大型对象,因此建议避免将ArrayList作为答案之一。

2w3kk1z5

2w3kk1z51#

鉴于数组列表已经是一个巨大的对象,最坏的情况下,您试图避免的是2x的常数因子(您需要的内存是现在已经需要的内存的2倍)。换句话说,在这里尝试流式传输JSON是没有意义的。
如果你有一个对象流,每次从某个地方读取一个对象(比如,你正在遍历一个DB结果集,并将每一个“行”转换为一个对象,例如,使用JOOQ、JDBI或Hibernate,你想通过JSON发送这些对象),那么你想要的东西就很有意义。
换句话说,建议是:如果你想花点时间来减少这段代码的内存消耗,那么就回到最后生成一个巨大数组列表的代码,并将 that 改为一个流(小写的s.可能是一个实际的java.util.stream.stream,但更可能是一个迭代器或者只是一个不同的代码结构)。
然后再考虑JSON部分,完成后再研究this wiki page on streaming GSON

相关问题