我有一个用 Java 实现的优先级队列类,因为它是一个队列数组。我需要一种好方法(不使用序列化)在优先级队列中的对象的每次“事务”或 enqueue()/dequeue() 之后记录和存储优先级队列的内容。如果程序需要从文本文件重建优先级队列,它应该作为备份。
我的一些想法以及每个想法的问题:
在每个“事务”之后,循环遍历队列并使用对象之间的分隔符将每个事务写入文件中的一行。 -- 我的问题是,它需要将所有对象出队并重新入队,这看起来效率非常低。
每次入队或出队后,只需写入该对象或从文件中删除该对象即可。 -- 我的问题是:如果这是我应该采取的方法,那么我很难想出一种在出列后轻松查找和删除对象的方法。
任何提示/技巧/建议将不胜感激!
最佳答案
要循环队列,您只需迭代它即可。这是非破坏性的(但只是松散线程安全)
每次将队列的内容写入磁盘可能会非常慢。对于典型的硬盘驱动器,一个小队列将需要大约 20 毫秒来写入。即每秒最多 50 次。如果您使用 SSD,这对于小队列来说会快得多,但是即使您不使用序列化,您仍然必须编码数据。
另一种方法是使用 JMS 服务器,该服务器旨在支持事务、队列和持久性。典型的 JMS 服务器每秒可以处理大约 10,000 条消息。有许多优秀的免费服务器可用。
关于java - 将优先级队列读/写到文本文件的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310814/