java - 将优先级队列读/写到文本文件的有效方法是什么?

标签 java data-structures file-io

我有一个用 Java 实现的优先级队列类,因为它是一个队列数组。我需要一种好方法(不使用序列化)在优先级队列中的对象的每次“事务”或 enqueue()/dequeue() 之后记录和存储优先级队列的内容。如果程序需要从文本文件重建优先级队列,它应该作为备份。

我的一些想法以及每个想法的问题:

  • 在每个“事务”之后,循环遍历队列并使用对象之间的分隔符将每个事务写入文件中的一行。 -- 我的问题是,它需要将所有对象出队并重新入队,这看起来效率非常低。

  • 每次入队或出队后,只需写入该对象或从文件中删除该对象即可。 -- 我的问题是:如果这是我应该采取的方法,那么我很难想出一种在出列后轻松查找和删除对象的方法。

任何提示/技巧/建议将不胜感激!

最佳答案

要循环队列,您只需迭代它即可。这是非破坏性的(但只是松散线程安全)

每次将队列的内容写入磁盘可能会非常慢。对于典型的硬盘驱动器,一个小队列将需要大约 20 毫秒来写入。即每秒最多 50 次。如果您使用 SSD,这对于小队列来说会快得多,但是即使您不使用序列化,您仍然必须编码数据。

另一种方法是使用 JMS 服务器,该服务器旨在支持事务、队列和持久性。典型的 JMS 服务器每秒可以处理大约 10,000 条消息。有许多优秀的免费服务器可用。

关于java - 将优先级队列读/写到文本文件的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310814/

相关文章:

java - 如何在 Java 中将类型作为方法参数传递

java - 使用 java.io.file 的 jenkins 管道始终引用 master

java - 从可扩展卡片 View android中删除箭头图标

c++ - 使用 std::experimental::optional 实现列表

c - 将 csv(行数可变)读入数据结构的最佳实践

c# - 使用 File.Create 和 Delete 进行单元测试,但出现 "file used by other process"异常

java - 解压缩大文件(~80 GB)- 使用 Java 或 shell 脚本

Java:计算三角形的面积

java - 有什么理由不使用 resource.getInputStream() 吗?

c++ - 如何使用KDTree进行任意维度的top-k查询和范围查询