如何将带有gson的大对象保存在json文件中?

uyto3xhc  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(143)

我正在从超过50+ Mbs的服务器检索XML响应。
在这里我使用了refortment,并在@Streaming注解的帮助下,我将此响应直接保存到文件中,这样我就可以克服Out Of Memory Exception
到目前为止,这里一切看起来都很好,没有记忆问题。
现在我正在解析这个XML文件时,完全下载到Pojo类对象根据数据使用SAX XML Parser,现在你可以想象,如果文件是50+ Mbs,那么有多大的对象。
在将此XML转换为Pojo类对象后,现在我将此对象传递给Gson,以便他可以为我将此Object转换为JSON,然后,我将此JSON字符串保存到一个单独的文件中。
同样,Gson将在内存中执行所有这些操作,此时手机已耗尽,并抛出Out Of Memory Exception,这是正确的,因为我们似乎从内存消耗的Angular 来看这一点
首先,他尝试将XML转换为Pojo类,
然后将此响应传递给Gson以转换为JSON,在此对话期间,他将所有这些数据放入内存中,然后将此传递给我,然后我将此传递给文件写入对象以进行存储..等等
在这一点上,它真的变得很大。
我的问题
有没有什么方法可以让Gson直接把他的JSON响应写到一个文件中,而不是保存到内存中?

kgsdhlau

kgsdhlau1#

嗯,看起来这是为我工作,但它的速度较慢。
任何比这更好的解决方案都是受欢迎的。

val xmlParser = XmlParser()   // Custom Class for XML Conversion
xmlParser.parseXml(xmlFile)
val writer = FileWriter(jsonFile) // Simple file Object contaning path to the saved location
val data = GsonBuilder()
             .setPrettyPrinting()
             .create()
             .toJson(xmlParser.data, writer)
writer.close()

好的,在这里我找到了一个比上面更好的解决方案,它比上一个快8倍。
在这里,所有的都是一样的,只是改变并将BufferedWriter对象传递给toJson fun调用,而不是简单的FileWriter
例如:val writer = BufferedWriter(FileWriter(jsonFile))

相关问题