BufferedReader比Scanner有什么好处

时间:2013-01-12 11:04:51

标签: java java.util.scanner bufferedreader

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

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();
}
}

3 个答案:

答案 0 :(得分:2)

可能在编写此代码时,Scanner类不存在(实际上java 1.4没有Scanner类),或者编写此代码的人只是使用BufferedReader的readLine方法而不是使用Scanner.nextLine( )方法,我看不到关于你的问题的其他解释

答案 1 :(得分:2)

这是您打算如何使用流的问题。存在用于简单和线程应用程序的缓冲读取器。这是由于扫描仪缺乏线程安全性。

我想你会从这个问题Scanner vs. BufferedReader

中获得更多信息

答案 2 :(得分:0)

BufferedReader更简单(这使它更有效),但它也是一个更明确的选择,显示您打算使用BufferdReader提供的功能。即readLine()是主要的。

简而言之,如果你有BufferedReader,你知道它只是读取线条。如果您使用Scanner,则意味着您可能或许多人不会阅读更复杂的内容。

顺便说一句:

  Integer.parseInt(br.readLine())

  scanner.nextInt();

虽然区别通常在noob开发者身上失去,但并不相同。出于这个原因,我更喜欢第一个例子。不同之处在于如何处理新行。