为什么有时候Java process builder只获得一行流程输出?
当您在终端中执行“docker history[id]-q”时,您将得到一个id字符串列表 现在我想通过java程序得到字符串列表。然而,有时我只能得到输出的第一行。(当我重复运行同一个命令时,这是随机发生的) 代码如下所示,有人对此有想法吗?非常感谢你为什么有时候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
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系统中,并且可以被读取。这一过程中没有任何内容你的链接说明了相反的情况。