最有效的习惯用法只从文件中读取一个整数?

时间:2009-06-17 20:04:52

标签: java file performance io

在尝试解决Facebook的Puzzle“Hoppity Hop”,http://www.facebook.com/careers/puzzles.php?puzzle_id=7时,我只从一个文件中读取一个整数。我想知道这是否是最有效的机制呢?

private static int readSoleInteger(String path) throws IOException {
    BufferedReader buffer = null;
    int integer = 0;

    try {
        String integerAsString = null;

        buffer = new BufferedReader(new FileReader(path));

        // Read the first line only.
        integerAsString = buffer.readLine();

        // Remove any surplus whitespace.
        integerAsString = integerAsString.trim();

        integer = Integer.parseInt(integerAsString);
    } finally {
        buffer.close();
    }

    return integer;
}

我见过How do I create a Java string from the contents of a file?,但我不知道回答这个问题的成语的效率。

查看我的代码,似乎有很多行代码和对象可以解决一个小问题......

2 个答案:

答案 0 :(得分:8)

最短方法将使用Scanner

private static int readSoleInteger(String path) {
    Scanner s = new Scanner(new File(path));
    int ret = s.nextInt();
    s.close();
    return ret;
}

请注意Scanner吞下任何IOExceptions,这样可以简化事情。

至于“最有效”......好吧,从磁盘打开文件的简单行为可能是你为此编写的任何方法中最慢的部分。在这种情况下,不要过分担心效率。

编辑:我没有意识到整数可以在其两侧都有空格。我的代码目前没有考虑到这一点,但很容易制作Scanner skip things。我添加了一行

s.skip("\\s+");

纠正这个。

编辑2:没关系,Scanner在尝试解析数字时会忽略空格:

  

可以通过此类实例解析为数字的字符串是根据以下正则表达式语法指定的:

     
    

(regexes snipped)

  
     

在上述正则表达式中,空格并不重要。

答案 1 :(得分:4)

我会使用Scanner类:

Scanner sc = new Scanner(new File("my_file"));
int some_int = sc.nextInt();