跳到主要内容

~/posts · 2026.10.26

大文件加密导出,改成边读边写

导入和导出逐块处理,再检查长度、截断、多余尾部和失败后的临时输出。

1 分钟 devshan

之前做过便携加密文件的导入导出,这次翻代码时,我又沿着导出路径查了一遍内存使用。网盘读取已经分块,中间却还可能先拼出一份完整的字节数组,大文件在这一步又占回了内存。

新版便携格式把数据按固定大小分块,逐段读取、认证加密和输出。导入时同样读一段、验证一段、写一段。每块的认证带上文件头和元数据摘要,用来核对块序以及所属文件。

我把中间的整文件读取也一并拆掉,从输入到输出追完了实际字节流。

少读和多读都要检查

头部声明的块数、每块长度和最终总大小要对得上。最后一块后面如果还有额外数据,导入也会报错。我用正确文件分别做了截断、改长度和追加尾部的测试。

导入先写临时输出,全部检查完成才发布到最终位置,失败时清掉未完成内容。读取器根据便携格式版本选择处理方式,旧格式的兼容也放在这里。

文件格式和应用版本各管各的。以后修界面不必跟着升级导出格式,只有字节组织和认证规则变化时才需要处理它。