Java文件访问 - 性能注意事项

时间:2010-09-26 21:45:14

标签: java performance file-io

所有

考虑到我之前的查询Stackoverflow-Post,这是我目前正在做的事情。这是一种流程图:

1> 将记录添加到文件
       一个。获取新记录的详细信息
       湾从文件中检索所有记录        C。将检索到的每条记录与新记录详细信息进如果找到匹配项,请不要添加到文件中,否则添加新记录。

2> 在文件中搜索记录
      一个。获取要搜索的记录的详细信息(此处仅显示信用卡号。)
      湾从文件中检索所有记录       C。将检索到的每条记录与搜索到的记录进行比较如果找到匹配项,则显示详细信息。

3> 从文件中删除记录
      一个。获取要删除的记录的详细信息(此处仅显示信用卡号。)
      湾从文件中检索所有记录       C。将检索到的每条记录与搜索到的记录进行比较如果找到匹配项,请从文件中删除该条目。

可以看出,我每次都在进行操作。有什么方法可以优化或提高我的代码的性能吗?

我用于添加记录的API为FileWriter,对于搜索操作,它为BufferedReader,删除记录的API为BufferedReaderPrintWriter

2 个答案:

答案 0 :(得分:3)

使用数据库。

使用索引文件作为信用卡号。索引文件可以像散列或树一样构造,并包含指向数据文件偏移量的指针。索引文件中的查找速度很快,因为您只有一个密钥(信用卡号)。

计算信用卡号码的哈希值并将其存储在索引中。这样,您就可以快速识别条目是否存在。

答案 1 :(得分:1)

我还建议您使用数据库,但如果您必须使用文件,那么我建议的选项是Java serialization。使用Key维护HashMap作为信用卡号码,其余信息包含在一个对象作为值。每次添加新记录时将信息添加到hashmap并序列化数据并删除旧文件。由于信息位于hashmap中,因此可以删除记录并进行搜索。 ,你要做的就是检查密钥是否存在,另一个好处是你不必费心写入文件然后再解析它的格式。

如果记录数量很大,则可能出现的问题是您必须将大文件加载到内存中。解决方案是您可以保持每个文件的记录数限制,并且您可以保持一个外观 - 一个可导航的地图(check this link for example)。一系列的信用卡号码可以存储在某个文件中。查询的关键可以是信用卡的起始范围,价值可以是文件名。