Java BufferedReader优于Scanner的优点是什么

Java BufferedReader优于Scanner的优点是什么,java,java.util.scanner,bufferedreader,Java,Java.util.scanner,Bufferedreader,下面是一段关于图中深度优先搜索的代码。 谁知道为什么在这段代码中使用bufferedReader类? 为什么不使用nextInt函数呢? 它的特权是什么? 是为了加快处理速度吗? 谢谢:) 导入java.io.BufferedReader; 导入java.io.IOException; 导入java.io.InputStreamReader; 类图 { int g[][]; int v,e; 国际访问[]; void createGraph()引发IOException { INTA,b; Bu

下面是一段关于图中深度优先搜索的代码。 谁知道为什么在这段代码中使用bufferedReader类? 为什么不使用nextInt函数呢? 它的特权是什么? 是为了加快处理速度吗? 谢谢:)

导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
类图
{
int g[][];
int v,e;
国际访问[];
void createGraph()引发IOException
{
INTA,b;
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
System.out.print(“\n输入顶点数=”);
v=Integer.parseInt(br.readLine());
System.out.print(“\n输入边数=”);
e=Integer.parseInt(br.readLine());
g=新整数[v+1][v+1];

对于(int i=1;i可能,当编写此代码时,Scanner类不存在(事实上java 1.4没有Scanner类),或者编写此代码的人只是更喜欢使用BufferedReader的readLine方法,而不是使用Scanner.nextLine()方法,我看不到关于您的问题的其他解释可能,在编写此代码时,Scanner类不存在(事实上java 1.4没有Scanner类),或者编写此代码的人只是更喜欢使用BufferedReader的readLine方法,而不是使用Scanner.nextLine()方法,我看不到关于您的问题的其他解释

BufferedReader更简单(这使它稍微更有效率),但它也是一个更清晰的选择,表明您打算使用BufferderReader提供的功能。例如,
readLine()
是主要的选择

简言之,如果你有
BufferedReader
你知道它只是在读行。如果你使用
Scanner
它意味着你可能正在读或没有在读更复杂的东西

顺便说一句:

虽然noob开发人员通常会忽略这一区别,但它们并不相同。因此,我更喜欢第一个示例。区别在于新行的处理方式。

BufferedReader更简单(这使它稍微更高效)但这也是一个更明确的选择,表明您打算使用BufferdReader提供的功能。例如,
readLine()
是主要的选择

简言之,如果你有
BufferedReader
你知道它只是在读行。如果你使用
Scanner
它意味着你可能正在读或没有在读更复杂的东西

顺便说一句:


虽然noob开发人员通常会忽略这一区别,但它们并不相同。因此,我更喜欢第一个示例。区别在于新行的处理方式。

这是一个如何使用流的问题。对于简单和线程化的应用程序,存在一个缓冲读取器。这是因为scanner缺乏线程安全性


我想你会从这个问题中得到更多信息。这是一个你打算如何使用流的问题。对于简单的线程应用程序,存在一个缓冲读取器。这是因为扫描仪缺乏线程安全性


我想你会从这个问题中得到更多信息,以便检测到无效整数?你为什么在这里提问?为什么不问问编写它的人?你在这里得到的只是猜测,例如,可能作者不知道扫描仪,或者当时没有扫描仪,或者不关心,或者更喜欢任何一种类型的BufferedReader许多可能的原因,例如@fge。不具有建设性。@EJP您可以将其视为"相比之下,BufferedReader有什么好处Scanner@JanDvorak我想我们都能猜到OP的真正含义。我更喜欢按写的方式处理文本。他问为什么。看起来代码是为一次性从System.in读取大量行而设计的。就像你复制并粘贴文件内容到控制台一样。缓冲输入流读卡器总是提高性能。所以会检测到无效的整数?为什么你在这里提问?为什么不问问写它的人?你在这里得到的只是猜测,例如,可能作者不知道扫描仪,或者当时没有扫描仪,或者不关心,或者对于许多可能的错误,首选BufferedReaderason如@fge。不具有建设性。@EJP您可以将其视为"相比之下,BufferedReader有什么好处Scanner@JanDvorak我想我们都能猜到OP的真正含义。我更喜欢按写的方式处理文本。他问为什么。看起来代码是为一次性从System.in读取大量行而设计的。就像你复制并粘贴文件内容到控制台一样。缓冲输入流reader总是提高性能。您好,Harlandarka,您的意思是它也可以与Scanner的方法一起工作?@Shr723 Scanner也可以工作(默认情况下,它也接受空格作为分隔符,而前者需要换行符)。我不是说它可以与scanner方法一起工作,我是说它绝对可以与scanner.nextLine方法一起工作,因为它从行的开始到行的结束(\r\n或两者都可以)@JanDvorak Scanner仅在使用Scanner.next方法时才接受空格而不是换行符。如果使用Scanner.nextLine,它接受换行符Rhi Harlandarka您的意思是它也可以与Scanner的方法一起工作?@Shr723 Scanner也可以工作(默认情况下它也接受空格作为分隔符,而前者需要换行符)。我不是说它可以与scanner方法一起工作,我是说它绝对可以与scanner.nextLine方法一起工作,因为它从行的开始到行的结束(\r\n或两者都可以)@JanDvorak Scanner仅在使用Scanner时才接受空格而不是换行符。下一个方法,如果使用Scanner.nextLine,则接受换行符分隔符如果使用Scanner.nextLine()则与BufferedReader.readLine()相同如果使用Scanner.nextLine()则与BufferedReader.readLine()相同
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Graph
{
int g[][];
int v,e;
int visited[];
void createGraph()throws IOException
{
    int a,b;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("\n Enter Number Of Vertices = ");
    v=Integer.parseInt(br.readLine());
    System.out.print("\n Enter Number Of Edges = ");
    e=Integer.parseInt(br.readLine());  
    g=new int[v+1][v+1];
    for(int i=1;i<=e;i++)
    {
        System.out.print("\n Enter Edge Infomation ");
        System.out.print("\n From =");
        a=Integer.parseInt(br.readLine());
        System.out.print("\n To =");
        b=Integer.parseInt(br.readLine());  
        g[a][b]=g[b][a]=1;
    }
}
void callDFS()
{
    visited = new int[v+1];
    dfs(1);
}   
void dfs(int k)
{
    System.out.print(k + "\t");
    visited[k]=1;
    for(int i=1;i<=v;i++)
    {
        if(g[k][i] !=0 && visited[i]!=1)
        dfs(i);
    }
}
}
class DFS
{
public static void main(String args[])throws IOException
{
    Graph g = new Graph();
    g.createGraph();
    g.callDFS();
}
}
  Integer.parseInt(br.readLine())
  scanner.nextInt();