如果您想不断访问文件,什么是好"design pattern"?



我有一个文件(dictionary.txt),其中包含如下数据字段条目-

    ABC This represents ...
    PQR This represents ...
    XYZ This represents ...
    ...
    ...
    ... (hundreds of such entries)

我有一个名为Searcher.Java的Java程序,具有以下函数

private String[] searchInsideFile(String stringToMatch, String fileName)

这将查找文件中字符串ToMatch中包含的任何数据字段的出现情况。然而,该函数每次都会打开和关闭文件,并读取其数百个字段中的所有字段以查找匹配项。

我将不得不多次调用这个函数(可能有数百次),因此,我认为我所做的不是很有效。对于这种情况,有一个好的"设计模式"吗?谢谢

如果可能,您应该在内存中预加载文件的整个内容,并使用定义为属性的某些数据结构对其进行索引,可能是用要匹配的字符串键控的Map。然后方法searchInsideFile应该查看数据结构内部,避免完全加载文件。

最快的解决方案是读取一次文件并将其保存在内存中。但只有当它不是一个大文件时,这才是好的。如果文件太大或将来可能变得太大,您必须每次从磁盘上读取它,因为您必须搜索整个文件。在这种情况下,随机访问并不能真正帮助您。

如果文件不是太大并且不会更改,您可以在启动时将其内容读取为字符串,然后在其顶部进行

我将使用ConstantDataManager模式。基本思想是,当你启动程序时,会有一个开销,因为对象从你正在使用的文件中提取所有信息,作为矢量或你想要存储的(地图等)。

然后,你可以对数据存储进行二进制搜索(假设你的字典按顺序存储单词),如果你愿意,你可能还想在对象中有一个保存方法来更新文件中的任何内容。

一本很好的书是"Java中的软件架构设计模式-Partha Kuchana"这里有一个链接到书中的相关章节,尽管你必须付费观看72小时或从他们那里购买。你可能可以从任何图书馆或其他来源获得它。。。http://www.crcnetbase.com/doi/pdf/10.1201/9780203496213.ch7

此外,你有没有想过使用MYSQL数据库,如果你的字典有很多条目,这可能会让速度更快?

希望这能有所帮助,-Ben

也许将Searcher类中的文件作为实例变量,然后创建一个单独的函数来打开该文件。然后更改searchInsideFile()函数以访问以前已经打开的文件。之后记得关闭文件!

最新更新