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

Java文件访问-性能注意事项,java,performance,file-io,Java,Performance,File Io,全部, 考虑到我之前的问题,下面是我目前正在做的事情。这是一种流程图: 1>将记录添加到文件中: A.获取新记录的详细信息 B从文件中检索所有记录。 C将检索到的每个记录与新记录详细信息进行比较。如果找到匹配项,请不要添加到文件,否则请添加新记录 2>在文件中搜索记录 A.获取要搜索的记录的详细信息(此处仅显示信用卡号)。 B从文件中检索所有记录。 C将检索到的每个记录与搜索到的记录进行比较。如果找到匹配项,则显示详细信息 3>从文件中删除记录 A.获取要删除的记录的详细信息(此处仅显示信用卡号

全部,

考虑到我之前的问题,下面是我目前正在做的事情。这是一种流程图:

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

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

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

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

我用于添加记录的API是
FileWriter
,用于搜索操作的API是
BufferedReader
,用于删除记录的API是
BufferedReader
PrintWriter
使用数据库

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

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

使用数据库

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


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

我也建议您使用数据库,但如果您必须使用文件,则我可以建议您使用一个选项。维护一个哈希图,其中Key作为信用卡号,其余信息包装在一个对象中作为值。每次添加新记录时,将信息添加到hashmap和序列化数据并删除旧文件。删除记录和搜索记录都可以做到这一点,因为信息在hashmap中,所以只需检查密钥是否存在,另一个优点是不必担心写入文件然后再次解析的格式


如果记录的数量很大,则可能出现的一个问题是您必须将大文件加载到内存中。解决方案是您可以保持每个文件记录数量的限制,并且可以使用可导航地图()进行查找。信用卡号的范围可以存储在某个文件中。用于查找的密钥可以是信用卡的起始范围,值可以是文件名

我还建议您使用数据库,但如果您必须使用文件,那么我可以建议您使用一个选项。维护一个哈希图,其中Key作为信用卡号,其余信息包装在一个对象中作为值。每次添加新记录时,将信息添加到哈希图中,并序列化数据并删除旧文件。您也可以这样做由于信息在hashmap中,所以可以很容易地删除记录并进行搜索,您所要做的就是检查密钥是否存在,另一个优点是您不必担心写入文件然后再次解析它的格式


如果记录的数量很大,则可能出现的一个问题是您必须将大文件加载到内存中。解决方案是您可以保持每个文件记录数量的限制,并且可以使用可导航地图()进行查找。信用卡号的范围可以存储在某个文件中。用于查找的密钥可以是信用卡的起始范围,值可以是文件名

+1-这些是数据库设计用来完成的任务。+1-这些是数据库设计用来完成的任务。