为什么有时候Java process builder只获得一行流程输出?

为什么有时候Java process builder只获得一行流程输出?,java,docker,processbuilder,Java,Docker,Processbuilder,当您在终端中执行“docker history[id]-q”时,您将得到一个id字符串列表 现在我想通过java程序得到字符串列表。然而,有时我只能得到输出的第一行。(当我重复运行同一个命令时,这是随机发生的) 代码如下所示,有人对此有想法吗?非常感谢你 String[] cmdParaArray = {"docker", "history", ID, "-q"}; ByteArrayOutputStream baos = new ByteArrayOutputStream(); CmdE

当您在终端中执行“docker history[id]-q”时,您将得到一个id字符串列表

现在我想通过java程序得到字符串列表。然而,有时我只能得到输出的第一行。(当我重复运行同一个命令时,这是随机发生的)

代码如下所示,有人对此有想法吗?非常感谢你

 String[] cmdParaArray = {"docker", "history", ID, "-q"};
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 CmdExecutor.execute(cmdParaArray, baos);
 String imageInfoJsonString = baos.toString();


 public static List<String> execute(String[] cmdParaArray, OutputStream os) {
  try {
        ProcessBuilder pb = new ProcessBuilder(cmdParaArray)
                .redirectErrorStream(true);
        Process proc = pb.start();

        InputStream is = proc.getInputStream();

        BufferedReader reader
                = new BufferedReader(new InputStreamReader(is));

        String line;
        while ((line = reader.readLine()) != null) {
            if (os != null) {
                os.write((line + "\n").getBytes());
                os.flush();
            }
        }
   }
String[]cmdParaArray={“docker”,“history”,ID,“-q”};
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
CmdExecutor.execute(cmdParaArray,baos);
字符串imageInfoJsonString=baos.toString();
公共静态列表执行(字符串[]CMDPararray,OutputStream os){
试一试{
ProcessBuilder pb=新的ProcessBuilder(CMDPararray)
.重定向错误流(true);
processproc=pb.start();
InputStream=proc.getInputStream();
缓冲读取器
=新的BufferedReader(新的InputStreamReader(is));
弦线;
而((line=reader.readLine())!=null){
如果(os!=null){
写((行+“\n”).getBytes();
os.flush();
}
}
}

这是不相关的,但为什么您首先将字节转换为文本,然后逐行读取它们,只是为了将它们转换回字节以存储在
输出流中?@在读取所有行之前是否完成该过程是不相关的。它们仍然存在于I/O系统中,并且可以被读取。这一过程中没有任何内容你的链接说明了相反的情况。