Java 扫描仪(新文件)和扫描仪(新文件输入流)之间有什么区别?

Java 扫描仪(新文件)和扫描仪(新文件输入流)之间有什么区别?,java,file,java.util.scanner,Java,File,Java.util.scanner,我观察到,Scanner用于文件读取时,可以同时使用以下参数:file和FileInputStream Scanner scan = new Scanner(new File("myfile.txt")); 及 然而,我不知道这两个定义之间的区别。 是否存在与性能相关的差异? 你更喜欢哪一个 任何人请解释。谢谢。来自扫描仪(文件)源代码: public Scanner(File source) throws FileNotFoundException { this((Rea

我观察到,
Scanner
用于文件读取时,可以同时使用以下参数:
file
FileInputStream

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

然而,我不知道这两个定义之间的区别。 是否存在与性能相关的差异? 你更喜欢哪一个

任何人请解释。谢谢。

来自
扫描仪(文件)
源代码:

public Scanner(File source) 
    throws FileNotFoundException
{
    this((ReadableByteChannel)(new FileInputStream(source).getChannel())); 
}
框架将基于
文件
实例创建
文件输入流

遵循每个路径的源之后,它将调用此构造函数:

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将提高您在执行时的性能。只有当您通过使用探查器发现某一行是瓶颈时,性能才有意义。

实际上,这并不完全正确,
扫描仪可以获得
文件
,它可以获得
输入流

扫描仪
不仅仅是为文件设计的

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

Scanner scan = new Scanner(new File("myfile.txt")); 
实际上,接收
文件
的构造函数将其转换为
文件输入流
,因此基本上只是为了更快地编码

一句话:没有性能差异