之前做过便携加密文件的导入导出,这次翻代码时,我又沿着导出路径查了一遍内存使用。网盘读取已经分块,中间却还可能先拼出一份完整的字节数组,大文件在这一步又占回了内存。
新版便携格式把数据按固定大小分块,逐段读取、认证加密和输出。导入时同样读一段、验证一段、写一段。每块的认证带上文件头和元数据摘要,用来核对块序以及所属文件。
我把中间的整文件读取也一并拆掉,从输入到输出追完了实际字节流。
少读和多读都要检查
头部声明的块数、每块长度和最终总大小要对得上。最后一块后面如果还有额外数据,导入也会报错。我用正确文件分别做了截断、改长度和追加尾部的测试。
导入先写临时输出,全部检查完成才发布到最终位置,失败时清掉未完成内容。读取器根据便携格式版本选择处理方式,旧格式的兼容也放在这里。
文件格式和应用版本各管各的。以后修界面不必跟着升级导出格式,只有字节组织和认证规则变化时才需要处理它。