我在更新 csv 文件(写入)时遇到问题,如果抛出任何异常,例如系统电源也可能关闭或其他应用程序正在读取文件。这种情况下,读取端无法判断csv文件是否更新完整。有什么技术(格式)可以解决这个问题吗?我进行了研究,发现如果文件更新成功,我们可以添加一些关键字,例如 EOF(xxxx),但是有没有更标准化的想法?
问问题
371 次
1 回答
2
尝试在文件末尾附加校验和或 CRC。这将允许您检测在写入文件时是否发生错误。
当您读回文件时,只需计算校验和,并将其与保存的校验和进行比较。如果它们不同,则文件是错误的。
但是,这会使文件难以手动修改。仅当文件不打算手动创建或修改时,我才建议这样做。
编辑:
校验和与 CRC 不同,尽管您会听到错误地互换使用的术语。校验和只是获取某个数据单元中的所有数据,然后将它们加在一起。CRC 获取数据并对其执行位操作。校验和计算起来更容易、更快,但会导致比 CRC 更多的误报,因此鲁棒性较差。
两者都用于验证数据完整性,通常用于通过网络传输数据。它适用于此目的,因为您正在将数据从 RAM“流式传输”到磁盘。如果传输中发生错误,校验和是一种自然的检查方式。
创建一个CheckedOutputStream。当您将字节写入 CSV 时,它将保持校验和。完成文件写入后,从 CheckedOutputStream 检索校验和,并将其写入文件。然后关闭流。
读回数据时使用CheckedInputStream 。然后将读取时计算的校验和与文件中存储的校验和进行比较。如果它们相同,则文件极有可能没有错误。我说极有可能是因为使用校验和或 CRC,误报的可能性非常小。
于 2013-08-12T04:48:28.500 回答