密码本开发笔记之读写与保存
第一版 读写共用同一个原始文件
每条记录可以看作一个数据块
顺序读取每一块并记录每一块的起始位置和数据长度。
但是更新写入就有点复杂了。
- 新增,直接在文件流末尾写入。
- 删除,找到下一块的位置,然后循环读取后续部分的数据前移一段位置,然后更新文件的长度,最后还要更新每一块新的起始位置。
- 更新,需要先算出数据的长度,然后判断要移除部分空间还是扩张部分空间,然后写入数据,最后还要更新每一块的起始位置。
缺点
- 频繁读写,动不动就要移动子节。
- 实时写入,撤销麻烦。
第二版 读原始文件,写临时文件
先读取数据块,并标记数据块是原始文件。
所有未保存的删除写入更新,都是发生在临时文件中。
- 新增,在临时文件末尾写入。
- 删除,直接删除一个数据块记录进行了,不需要进行文件读写。
- 更新,在临时文件末尾写入,并更新数据块记录为临时文件和新的起始位置及长度。
- 保存,获取所有数据块记录从0循环写入到原始文件中,最后更新原始文件的长度。
优点
- 减少了对原始文件的写入
- 不在自动保存,可以撤销。
转载请保留原文链接: https://zodream.cn/blog/id/268.html