在编组到 xml 到文件之前计算 JAXB 输出流的校验和

Calculating the checksum of the JAXB output stream before marshalling to xml to file

我们的生产环境遇到了奇怪的问题。我们必须生成数千个 xml 个文件,每个文件的大小约为 100MB。

我们使用带有 XSD 验证的 JAXB 来生成 xml 文件。但有时(到目前为止在 6 个月内发生了 2 次)生成的 XML 文件是 jumbled/corrupted.

但是我们在服务器日志中没有找到任何 errors/exceptions。 所以我们怀疑问题不是在生成 XML 文件时,而是在写入文件系统时,因为我们使用 NFS(网络文件系统)来存储我们所有的文件。

由于我们无法找到根本原因,我们正在考虑添加额外的验证步骤,例如在文件写入前后检查内容校验和。

现在的问题是,

  1. 有没有办法在写入文件之前获取 XML 的校验和。比如计算输出流的校验和?

  2. 是否有任何其他方法可以验证写入文件的数据的完整性?

有个CheckedOutputStream that you perhaps can use as OutputStream when marshalling the content? Then you could use CheckedInputStream把数据再读回来看看有没有变。

我已经找到了解决办法。 有一个名为 "DigestOutputStream" 的 class 可用于此目的,它在 JDK 中可用。