"BufferedReader.ready"与"while(BufferedReader.readLine()!= null)"

San*_*anu 1 java bufferedreader

对于java来说,我是新手.我想从java中启动的进程中读取stdout.我在谷歌搜索时得到以下代码:

    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(args);
    BufferedReader br = new BufferedReader(
        new InputStreamReader(proc.getInputStream()));
    while(br.ready()){
            System.out.println(br.readLine());
    }
Run Code Online (Sandbox Code Playgroud)

但是,此代码不会打印进程(例如,ls)应该生成的输出(顺便说一下,我在Linux上,openJDK 1.6)

但是,如果我将while循环更改为:

    String line;
    while((line = br.readLine())!=null){
            System.out.println(line);
    }
Run Code Online (Sandbox Code Playgroud)

它按预期工作.

以前的代码有什么问题?根据java api doc所说的,我认为它们是相似的.

ada*_*shr 5

在前一个循环中,您只是循环使用就绪状态,而不是从流中读取任何字节.