将文本重定向到java中的外部程序:文件名太长

将文本重定向到java中的外部程序:文件名太长,java,runtime,executable,Java,Runtime,Executable,对于一个大学项目,我需要验证大量数据(~5TB)。我尝试为每个证书创建一个文件,并使用/zlint temp-cert.pem-format pem重定向内容,但由于数据集庞大,这种方法太慢 外部程序zlint能够从stdin或文件中读取数据 目前,我在集合中迭代并为每一行执行: Runtime rt = Runtime.getRuntime(); String[] cmd = new String[] {"echo \"" + dao.raw + "\" | zlint -format bas

对于一个大学项目,我需要验证大量数据(~5TB)。我尝试为每个证书创建一个文件,并使用
/zlint temp-cert.pem-format pem
重定向内容,但由于数据集庞大,这种方法太慢

外部程序zlint能够从stdin或文件中读取数据

目前,我在集合中迭代并为每一行执行:

Runtime rt = Runtime.getRuntime();
String[] cmd = new String[] {"echo \"" + dao.raw + "\" | zlint -format base64"};
Process pr = rt.exec(cmd);
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
while ((line = input.readLine()) != null) {
    cmdOutput.append(line);
}
// handle the results
在命令行中使用此命令非常有效。对于Java运行时,我得到:

Cannot run program "echo "..." | ./zlint -format base64": error=63, File name too long
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at java.lang.Runtime.exec(Runtime.java:620)
    at java.lang.Runtime.exec(Runtime.java:485)
    ...
Caused by: java.io.IOException: error=63, File name too long
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 6 more
无法运行程序“echo”…“|./zlint-format base64”:错误=63,文件名太长
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
位于java.lang.Runtime.exec(Runtime.java:620)
位于java.lang.Runtime.exec(Runtime.java:485)
...
原因:java.io.IOException:error=63,文件名太长
位于java.lang.UNIXProcess.forkAndExec(本机方法)
位于java.lang.UNIXProcess(UNIXProcess.java:247)
在java.lang.ProcessImpl.start(ProcessImpl.java:134)处
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 还有6个

是否有任何方法可以将原始文本通过管道传输到外部程序,而无需创建临时文件?

有几种可能的参数可以作为命令部分传递,这是有充分理由的。Java process builder与命令行不同:您必须将命令行解释器可执行文件作为新流程命令的第一个字符串传递,并将其参数作为其余字符串传递