Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么BufferedReader比Scanner快?_Java_Performance_Bufferedreader - Fatal编程技术网

Java 为什么BufferedReader比Scanner快?

Java 为什么BufferedReader比Scanner快?,java,performance,bufferedreader,Java,Performance,Bufferedreader,我知道使用BufferedReader比使用扫描仪更快,因为扫描仪读取和解析流,而BufferedReader只读取流 但是,我不明白,如果我在从BufferedReader读取流之后解析流,为什么BufferedReader仍然会更快,这难道不是扫描器正在做的基本相同的事情吗?它们都在读取和解析,那么为什么BufferedReader速度更快呢 假设我将整数作为输入: public static void main(String[] args) throws IOException {

我知道使用BufferedReader比使用扫描仪更快,因为扫描仪读取和解析流,而BufferedReader只读取流

但是,我不明白,如果我在从BufferedReader读取流之后解析流,为什么BufferedReader仍然会更快,这难道不是扫描器正在做的基本相同的事情吗?它们都在读取和解析,那么为什么BufferedReader速度更快呢

假设我将整数作为输入:

public static void main(String[] args) throws IOException {

   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

   int x = Integer.parseInt(br.readLine());
   System.out.println(x);

   }
这不是和这个一样吗:

public static void main(String[] args) throws IOException {

   Scanner sc = new Scanner(System.in);
   int x = sc.nextInt();
   System.out.println(x);

   }
那么,我对其工作原理的理解是否正确? BufferedReader的较大缓冲区大小也有帮助吗? 与扫描仪相比,BufferReader具有8KB字节的大缓冲区。扫描仪速度稍慢,因为它还需要解析数据。 BufferReader比Scanner快,因为它只读取一个字符 溪流

缓冲读取器与扫描仪之间的差异

与扫描仪相比,BufferReader具有8KB字节的大缓冲区。扫描仪速度稍慢,因为它还需要解析数据。 BufferReader比Scanner快,因为它只读取一个字符 溪流

缓冲读取器与扫描仪之间的差异


从内存来看,Scanner大量使用正则表达式工作流,这增加了APII的性能影响。我建议您在OpenJDK的repo中查看Scanner和BufferedReader各自的源代码。我认为这将是非常有见地的。你可以阅读Scanner的源代码,你会发现阅读nextInt实际上是一个相当复杂的工作流程,这使它能够适应更具适应性的一般规则。设计用于执行特定功能的类比设计用于执行许多功能的类效率更高。扫描器还需要能够解析字符串和双精度等,因此它将具有与解析int不严格相关的附加逻辑。@camickr附加逻辑如何降低函数的效率?对于每一个特定的案例,下一个,下一个,不是有一个方法吗。。。所以每种方法都能有效地完成它的任务?换句话说,我的意思是,添加额外的函数不应该降低它们的效率。从内存来看,Scanner大量使用正则表达式工作流,这增加了api的性能。我建议您在OpenJDK的repo中查看Scanner和BufferedReader各自的源代码。我认为这将是非常有见地的。你可以阅读Scanner的源代码,你会发现阅读nextInt实际上是一个相当复杂的工作流程,这使它能够适应更具适应性的一般规则。设计用于执行特定功能的类比设计用于执行许多功能的类效率更高。扫描器还需要能够解析字符串和双精度等,因此它将具有与解析int不严格相关的附加逻辑。@camickr附加逻辑如何降低函数的效率?对于每一个特定的案例,下一个,下一个,不是有一个方法吗。。。所以每种方法都能有效地完成它的任务?换句话说,我的意思是,添加额外的函数不应该降低它们的效率。这个TutorialsPoint页面不是一个可靠的来源。这是猜测。没有基准。没有引证。有些话显然是不正确的;e、 同步。。。什么时候应该说是同步的。哼!该TutorialPoint页面并非可靠的信息来源。这是猜测。没有基准。没有引证。有些话显然是不正确的;e、 同步。。。什么时候应该说是同步的。哼!