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

Hum*_*art 3 java io performance file

在尝试解决Facebook的拼图"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;
}
Run Code Online (Sandbox Code Playgroud)

我看过如何从文件内容创建Java字符串?,但我不知道回答这个问题的成语的效率.

看看我的代码,看起来很多行代码和对象都是一个微不足道的问题......

Mic*_*ers 8

最短的方法是用Scanner:

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

请注意,Scanner吞下任何IOExceptions东西,这样可以简化很多事情.

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

编辑:我没有意识到整数可以在它的两边都有空格.我的代码目前没有考虑到这一点,但很容易做出Scanner 跳过的事情.我添加了这条线

s.skip("\\s+");
Run Code Online (Sandbox Code Playgroud)

纠正这个.

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

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

(正则表达式)

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