Java Process.getInputStream()不会返回所有行

Java Process.getInputStream()不会返回所有行,java,linux,process,inputstream,processbuilder,Java,Linux,Process,Inputstream,Processbuilder,我的代码如下所示: public List<String> linux(String... commands) throws Exception{ Process p = null; ProcessBuilder builder = new ProcessBuilder(commands); p = builder.start(); BufferedReader reader= new BufferedReader(new InputStreamR

我的代码如下所示:

public List<String> linux(String... commands) throws Exception{

    Process p = null;
    ProcessBuilder builder = new ProcessBuilder(commands);
    p = builder.start();

    BufferedReader reader= new BufferedReader(new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8));

    String line;
    List<String> lines = new ArrayList<>();
    while((line = reader.readLine()) != null) lines.add(line);

    return lines;
}
公共列表linux(字符串…命令)引发异常{
进程p=null;
ProcessBuilder=新的ProcessBuilder(命令);
p=builder.start();
BufferedReader=新的BufferedReader(新的InputStreamReader(p.getInputStream(),StandardCharsets.UTF_8));
弦线;
列表行=新的ArrayList();
而((line=reader.readLine())!=null)行。添加(line);
回流线;
}

但它并没有返回所有的输出。我在实际的远程机器上试过,大约有100多行,但我只有30行。我遗漏了什么吗?

如果字符集在“é”一出现就出错,那么听起来它不是UTF-8。它可能是扩展的ASCII码,但如果这不起作用,我会试图弄清楚它到底是什么字符集


由于BufferedReader,它将在整个线路上失败

您试图捕获其输出的进程可能会将丢失的行写入其错误流(也可以考虑读取
p.errorStream()
),和/或您需要关闭进程的输入流,以便它不会等待您的任何消息。