什么是Scanner(新文件)和Scanner(新FileInputStream)之间的区别?

时间:2014-04-29 17:10:53

标签: java file java.util.scanner

我观察到,Scanner用于文件阅读时,可以使用两个参数:FileFileInputStream

Scanner scan = new Scanner(new File("myfile.txt")); 

Scanner scan = new Scanner(new FileInputStream("myfile.txt"));

但是,我不知道这两个定义之间的区别。 是否有任何与性能相关的差异? 哪一个更喜欢?

任何人请解释。感谢。

2 个答案:

答案 0 :(得分:5)

来自Scanner(File file)源代码:

public Scanner(File source) 
    throws FileNotFoundException
{
    this((ReadableByteChannel)(new FileInputStream(source).getChannel())); 
}

框架将基于FileInputStream实例创建File

在跟踪每个路径的源之后,它将调用此构造函数:

private Scanner(Readable source, Pattern pattern) {
    if (source == null)
        throw new NullPointerException("source");
    if (pattern == null)
        throw new NullPointerException("pattern");
    this.source = source;
    delimPattern = pattern;
    buf = CharBuffer.allocate(BUFFER_SIZE);
    buf.limit(0);
    matcher = delimPattern.matcher(buf);
    matcher.useTransparentBounds(true);
    matcher.useAnchoringBounds(false);
    useLocale(Locale.getDefault());
}

在性能方面,您不应该意识到这一点,因为JIT会在执行时为您提高性能。只有当您通过使用分析器发现线路成为瓶颈时,性能才应该起作用。

答案 1 :(得分:1)

实际上这不完全正确,Scanner可以获得File并且可以获得InputStream

Scanner不仅适用于文件。

此外,FileInputStream扩展了InputStream,因此它也可以作为一个简单的InputStream传递给扫描程序。

实际上接收File的构造函数将其转换为FileInputStream所以基本上它只是为了更快的编码

底线:没有性能差异