正如对您的问题的评论中所建议的那样,使用 SQLite 之类的数据库可能是一个非常好的解决方案。但是,如果您坚持使用文件,那么这当然是可能的。
我自己做过一次——使用文件在磁盘上创建了一个持久队列。
以下是有关如何实现这一目标的指南:
- 该文件应包含一个标题,该标题指向下一个未处理的记录(条目)和下一个要写入的可用位置。
- 如果记录具有可变长度,则每条记录都应包含一个标明记录长度的标头。
- 您可能希望为每条记录添加一个标志,指示该记录是否已处理
- 文件锁定可用于确保没有人读取正在写入的文件部分
- 使用低级 IO - 不要使用任何类型的缓冲流,使用直接写入语义
这是读写的方案(可能有一些小的逻辑错误,但你应该能够从那里得到它):
读者
- 锁定文件头并读取它并解锁它
- 转到最后一个记录位置
- 读取记录头和记录
- 在已处理标志打开的情况下写回记录头
- 如果您不在文件末尾锁定标题并写入下一个未处理记录的新位置,否则写入一些标记以指示没有更多记录要处理
- 确保要写入的下一条记录指向正确的位置
您可能还希望读者偶尔为您压缩文件:
- 锁定整个文件
- 将所有未处理的记录复制到文件的开头(您可能希望保留一些逻辑以免覆盖未处理的记录 - 仅当已处理空间大于未处理空间时才可能紧凑)
- 更新标题
- 解锁文件
作家
- 锁定文件头并查看下一条记录要写入的位置然后解锁
- 锁定文件从要写入的地方到记录的长度
- 写入记录并解锁
- 如果未处理的记录标记指示没有要处理的记录,则锁定标题让它指向新记录解锁标题
希望这能让你进入写作轨道