为什么命令行实用程序在使用java程序调用时需要花费大量时间来提供输出?
我正在使用libdmtx,它附带一个命令行实用程序,用于读取ECC200数据矩阵条形码的图像文件,读取其内容,并将解码后的消息写入标准输出。我在linux平台上的java程序中使用了命令行实用程序。我正在使用ubuntu linux。我已经在我的linux机器上安装了libdmtx。当我调用命令时 dmtxread-n/home/admin/ab.tif 在linux终端上,它立即即在15秒内给出图像中条形码的解码值。 但是,当我要使用java程序为同一个文件调用同一个命令时,该程序需要花费大量时间,即对于上面的同一个命令和同一个文件,平均需要16分钟 下面是调用上述命令的java代码为什么命令行实用程序在使用java程序调用时需要花费大量时间来提供输出?,java,linux,multithreading,process,processbuilder,Java,Linux,Multithreading,Process,Processbuilder,我正在使用libdmtx,它附带一个命令行实用程序,用于读取ECC200数据矩阵条形码的图像文件,读取其内容,并将解码后的消息写入标准输出。我在linux平台上的java程序中使用了命令行实用程序。我正在使用ubuntu linux。我已经在我的linux机器上安装了libdmtx。当我调用命令时 dmtxread-n/home/admin/ab.tif 在linux终端上,它立即即在15秒内给出图像中条形码的解码值。 但是,当我要使用java程序为同一个文件调用同一个命令时,该程序需要花费大量
public class Test {
public static void main(final String[] args) throws IOException, InterruptedException {
//Build command
List<String> commands = new ArrayList<String>();
commands.add("dmtxread");
commands.add("-n");
commands.add("/home/admin/ab.tif");
System.out.println(commands);
//Run macro on target
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectErrorStream(true);
Process process = pb.start();
//Read output
StringBuilder out = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null, previous = null;
while ((line = br.readLine()) != null){
System.out.println(line);
}
//Check result
if (process.waitFor() == 0)
System.out.println("Success!");
System.exit(0);
//Abnormal termination: Log command parameters and output and throw ExecutionException
System.err.println(commands);
System.err.println(out.toString());
System.exit(1);
}
}
公共类测试{
公共静态void main(最终字符串[]args)引发IOException、InterruptedException{
//生成命令
List命令=new ArrayList();
命令。添加(“dmtxread”);
命令。添加(“-n”);
commands.add(“/home/admin/ab.tif”);
System.out.println(命令);
//在目标上运行宏
ProcessBuilder pb=新的ProcessBuilder(命令);
pb.重定向错误流(真);
Process进程=pb.start();
//读取输出
StringBuilder out=新的StringBuilder();
BufferedReader br=新的BufferedReader(新的InputStreamReader(process.getInputStream());
String line=null,previous=null;
而((line=br.readLine())!=null){
系统输出打印项次(行);
}
//检查结果
if(process.waitFor()==0)
System.out.println(“成功!”);
系统出口(0);
//异常终止:记录命令参数、输出和抛出ExecutionException
System.err.println(命令);
System.err.println(out.toString());
系统出口(1);
}
}
我想问专家们
请任何人解释一下为什么java程序调用一个简单的命令要花这么长的时间,如果这个命令直接在命令提示符下运行,它将在15秒内被调用
谁能告诉我减少这一时间的方法吗
我猜这个程序花费了这么多时间,因为JVM的内部线程正在调用这个进程。我的猜测是对的吗?如果是,那么我如何克服这个问题
请指导我解决这个问题。谢谢你