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"));
实际上,接收文件
的构造函数将其转换为文件输入流
,因此基本上只是为了更快地编码
一句话:没有性能差异