gpt4 book ai didi

java - 编辑大型 xml 文件 'on the fly'

转载 作者:数据小太阳 更新时间:2023-10-29 02:27:14 31 4
gpt4 key购买 nike

我有一个 xml 文件存储在数据库 blob 中,用户将通过 spring/hibernate web 应用程序下载该文件。在通过 Hibernate 作为 byte[] 检索它之后,但在将其发送到输出流之前,我需要编辑 XML 的某些部分(具有两个子节点和一个属性的单个节点)。

我担心的是,如果文件较大(有些超过 40mb),那么我真的不想通过将整个文件放在内存中、对其进行编辑然后通过输出流将其传递给用户来执行此操作。有没有办法“即时”编辑它?

byte[] b = blobRepository.get(blobID).getFile();
// What can I do here?
ServletOutputStream out = response.getOutputStream();
out.write(b);

最佳答案

您可以使用 SAX 流。

使用 SAX 框架解析文件,当您的处理程序接收到 SAX 事件时,将未更改的项目传回构造 XML 输出的 SAX 处理程序。

当您到达“要更改的部分”时,您的中间类将读入不需要的事件,并写出需要的事件。

这样做的好处是不用将整个文件作为中间表示(比如 DOM)保存在内存中;但是,如果转换很复杂,您可能必须缓存许多项目(文档的部分)以便让它们可用于重新排列的输出。一个足够复杂的转换(一个可以做任何事情的转换)最终会变成 DOM 的开销,但如果您知道您忽略了文档的很大一部分,则可以节省大量内存。

关于java - 编辑大型 xml 文件 'on the fly',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11672244/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com