what are the benefits of BufferedReader over Scanner

ε祈祈猫儿з 提交于 2019-12-01 08:45:10

问题


here's a code about depth first search in graphs. who knows why bufferedReader class were used in this code? and why nextInt function not used instead? what is its privilege? is it for speeding up processing? Thanks :)

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

回答1:


It's an issue of how you intend to use the stream. A buffered reader exists for simple and threaded applications. This is due to scanner's lack of thread safety.

I think you'll get more on this from this question Scanner vs. BufferedReader




回答2:


Probably, when this code was written, the Scanner class didn't exist (in fact java 1.4 did not have the Scanner class), or maybe who written this code simply preferred using BufferedReader's readLine method instead of using Scanner.nextLine() method, i can't see other explainations about your question




回答3:


BufferedReader is simpler (which makes it slightly more efficient) but it is also a clearer choice showing you intend to do is to use the functionality BufferdReader provides. i.e readLine() is the main one.

In short, if you have BufferedReader you know it is just going to read lines. If you use Scanner it implies you may or many not be reading something more complicated.

BTW:

  Integer.parseInt(br.readLine())

and

  scanner.nextInt();

are not the same although the distinction is usually lost on noob developers. For this reason I prefer the first example. The difference is how new lines are handled.



来源:https://stackoverflow.com/questions/14292709/what-are-the-benefits-of-bufferedreader-over-scanner

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!