日期:2014-05-20  浏览次数:20790 次

请高帮我手看看我这样的输入数据的方法有什么问题吗
本帖最后由 u011405734 于 2013-07-15 01:34:22 编辑
我刚开始java看到很多书中在实现向程序中输入数据时对采用的是BufferedReader这个类和使用readLine()方法这种方式即:
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in));
    public String userInput(){
        String inputDate = null;
        try{
            inputDate = bufferedreader.readLine();
        }
        catch(IOException e){
            e.printStackTrace();
        }
但为什么没人采用System.in.read()这种方法了?我在编写了一段代码我觉得也能达到上面代码的目的请高手看看这样写有什么缺点
import java.io.*;

public class Read{
    public static void main(String [] args){
        byte [] b = new byte [1024];
        int len = 0;
        try{
            len = System.in.read(b);
        }
        catch(Exception e){
            e.printStackTrace();
        }
        int i = Integer.parseInt(new String(b,0,len-2));
        System.out.println(i);
    }
}

------解决方案--------------------
估计楼主还是没明白缓冲的概念呀!
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如, 

 BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));
 将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。