2

我需要以二进制格式序列化一些数据以提高效率(典型的数据记录为 10-100MB 文件),并且我正在制定格式细节。我想知道我是否真的需要担心文件损坏/错误更正等。

什么情况下会发生文件损坏?我应该在我的二进制格式中建立对腐败的鲁棒性吗?或者我应该用某种纠错码来包装我的非鲁棒到损坏字节流?(有什么建议吗?我正在使用 Java)或者我不应该担心这个?

编辑:我现在拥有的初步二进制格式包含一堆可变长度段,所以我有点担心,如果我确实有数据损坏,那么在读回它时,我可能会失去同步,并且不能恢复 + 我丢失了文件的其余部分。

4

4 回答 4

2

您至少应该添加校验和。BER 在现代硬盘上表现良好,但对于其他媒体则不然。写入过程中的断电通常会损坏文件结尾。如果数据很重要,您将需要纠错码、三次和无缓冲写入等来提交事务。

EXE 没有纠错功能,而单个位更改可能会产生严重后果。

如果要通过 TCP 传输文件,您可以假设零错误。

于 2010-05-27T13:35:16.143 回答
1

我见过一次或两次通过 Internet 传输的文件损坏的情况。您可以使用校验和(例如 SHA256)进行错误检测。

于 2010-05-27T13:35:58.067 回答
1

您可能对HDF5 中的错误检测代码的注释感兴趣。校验和的位置和类型取决于您访问和更新数据的方式以及检测错误的有用块。

于 2010-05-27T14:05:40.950 回答
-1

我使用了Reed-Solomon 编码系统。在 Google zxing库中有一个相当易于使用的Java 实现。

于 2010-07-09T20:15:28.330 回答