gpt4 book ai didi

java - 在 Java 中通过管道多次(基本上是 2 次)从 stdin 读取相同的数据

转载 作者:行者123 更新时间:2023-11-30 03:16:43 24 4
gpt4 key购买 nike

我正在尝试多次读取来自另一个命令的输出的数据。

我的命令是这样的:-

cat input.txt | java -Xmx128m abcJavaFile | sort -k1,1 | java -Xmx128m xyzJavaFile inputTextFile > output.txt

现在在 xyzJavaFile 中,我想将来自排序命令的一些数据存储在某些变量中,然后再次访问管道输出以使用相同的数据执行某些操作。

像这样:-

BufferedReader consoleInput1 = new BufferedReader(new InputStreamReader(System.in));
String curDoc1 = null;
while((curDoc1 = consoleInput1.readLine()) != null) {
//do something here
}

BufferedReader consoleInput2 = new BufferedReader(new InputStreamReader(System.in));
String curDoc2 = null;
while((curDoc2 = consoleInput2.readLine()) != null) {
//again do something here
}

最佳答案

不可能,管道传输数据。如果数据不太大,您可以将其存储起来,或者在第一次读取时将其写入临时文件,并使用该文件再次读取数据以进行第二个处理步骤。

BufferedReader consoleInput1 = new BufferedReader(new InputStreamReader(System.in));

String curDoc1 = null;
File temp = File.createTempFile("data", null);
try (BufferedWriter bw = Files.newBufferedWriter(temp.toPath())) {
while((curDoc1 = consoleInput1.readLine()) != null) {
doSomething(curDoc1);
bw.write(curDoc1 + "\n");
}
}

BufferedReader br = Files.newBufferedReader(temp.toPath());
String curDoc2 = null;
while((curDoc2 = br.readLine()) != null) {
//again do something here
}

根据计算的性质,也可以将两个循环合并为一个。

关于java - 在 Java 中通过管道多次(基本上是 2 次)从 stdin 读取相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com