字典:硬编码与外部文件

时间:2013-05-02 19:52:30

标签: java performance dictionary coding-style hardcode

我有一个java应用程序,它每秒多次启动和停止数亿项(从外部脚本调用)。

Input: String key
Output: int value

此应用程序的目的是在永远曾经更改Map(〜30k键)中查找某个键并返回该值。很容易。

  

问题:每秒多次使用时效率更高:

     
      
  1. Map
  2. 中的硬编码字典   
  3. 使用BufferedReader
  4. 读取外部文件   
  5. ...让我惊讶于你的其他想法
  6.   

我知道硬编码是邪恶但有时候,你需要变得邪恶才能提高效率: - )

3 个答案:

答案 0 :(得分:2)

从文件中读入字典。将其存储在Map中。将Java应用程序设置为连续运行的服务(因为您说它每秒被调用多次)。然后你的Map将被缓存在RAM中。

答案 1 :(得分:1)

最快的是内存中的硬编码地图。 如果您有一个巨大的文件,您可以使用内存映射文件:

MappedByteBuffer in = new FileInputStream("map.txt").getChannel().map(
FileChannel.MapMode.READ_ONLY, 0, LENGTH);
StringBuilder bs = new StringBuilder();
//read 1/4 of the file   
while (i < LENGTH/4)
      bs.append((char)in.get(i++));

虽然这种方法有点问题,但实际上您需要对文件进行分区 在线路中断,即读到第100行清理缓冲区并阅读更多内容。

答案 2 :(得分:0)

我会在启动应用程序时将文件加载到Map,然后按照您的描述使用它。

我会将数据存储在数据库中,以加快加载速度。

每次调用时,绝对没有应用程序启动和关闭;将它作为等待IO的服务,使用异步I / O,例如netty