使用输入流读取时缺少行 reader
Missing line when reading using input stream reader
我有一个示例 EXE,它打印在输出下方。
EXE 输出:
1
2
3
4
5
Failed
java中的等效代码:
for (int i = 1; i <= 5; i++){
System.out.println(i);
}
System.out.println("Failed");
当尝试使用 java 代码启动 EXE 并读取输出时,一些数据丢失了。
找到启动资产的java。
Java代码:
String[] commands = new String[] {"sample.exe" };
p = Runtime.getRuntime().exec(commands);
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
line = br.readLine()
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
输出:
1
3
5
从上面的输出可以清楚地看出我们缺少像 2,3,5,failed
.
这样的数据
我认为资产在我们使用 InputStreamReader
阅读之前就已经完成了。有没有什么方法可以让资产等到我们使用 InputStreamReader
读取并开始下一组指令,或者有没有其他更好的方法来做到这一点。
编辑1:
在我的原始代码中,我也在并行读取错误流,请找到代码。
ErrorStreamReader:
public void run () {
try {
InputStreamReader isr = new InputStreamReader (is);
BufferedReader br = new BufferedReader (isr);
while (true) {
String s = br.readLine ();
System.out.println(s+"error Stream");
if (s == null) break;
}
is.close ();
} catch (Exception ex) {
System.out.println ("Problem reading stream " + name + "... :" + ex);
ex.printStackTrace ();
}
}
EXE执行器java代码:
String[] commands = new String[] {"sample.exe" };
p = Runtime.getRuntime().exec(commands);
Thread errorStream = new Thread(new ReadStream("stderr",
p.getErrorStream ()) # Reads error Stream In parallel
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
line = br.readLine()
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
看起来输入流reader正在通过一次跳过一行来读取。
编辑2:
因为我认为 InputStreamReader
缺少偶数行,所以我在 EXE(python 脚本)中进行了更改,以从 1
打印到 6
然后失败了。
修改后的 EXE 输出:
1
2
3
4
5
6
Failed
现在 InputStreamReader 的输出是
Java 输出:
1
3
5
Failed
因为我认为我缺少奇数行。有人可以告诉我原因吗?
注:
The problem was due to reading the inputStream Twice sorry for the
inconvenience caused. I am extremely sorry.
问题是因为读取了两次输入流
while ((line = br.readLine()) != null) {
line = br.readLine() # input stream read here twice
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
问题由此而来。为了解决这个问题,我只读了一次 inputStream。
while ((line = br.readLine()) != null) {
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
我有一个示例 EXE,它打印在输出下方。
EXE 输出:
1
2
3
4
5
Failed
java中的等效代码:
for (int i = 1; i <= 5; i++){
System.out.println(i);
}
System.out.println("Failed");
当尝试使用 java 代码启动 EXE 并读取输出时,一些数据丢失了。
找到启动资产的java。
Java代码:
String[] commands = new String[] {"sample.exe" };
p = Runtime.getRuntime().exec(commands);
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
line = br.readLine()
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
输出:
1
3
5
从上面的输出可以清楚地看出我们缺少像 2,3,5,failed
.
我认为资产在我们使用 InputStreamReader
阅读之前就已经完成了。有没有什么方法可以让资产等到我们使用 InputStreamReader
读取并开始下一组指令,或者有没有其他更好的方法来做到这一点。
编辑1:
在我的原始代码中,我也在并行读取错误流,请找到代码。
ErrorStreamReader:
public void run () {
try {
InputStreamReader isr = new InputStreamReader (is);
BufferedReader br = new BufferedReader (isr);
while (true) {
String s = br.readLine ();
System.out.println(s+"error Stream");
if (s == null) break;
}
is.close ();
} catch (Exception ex) {
System.out.println ("Problem reading stream " + name + "... :" + ex);
ex.printStackTrace ();
}
}
EXE执行器java代码:
String[] commands = new String[] {"sample.exe" };
p = Runtime.getRuntime().exec(commands);
Thread errorStream = new Thread(new ReadStream("stderr",
p.getErrorStream ()) # Reads error Stream In parallel
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
line = br.readLine()
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
看起来输入流reader正在通过一次跳过一行来读取。
编辑2:
因为我认为 InputStreamReader
缺少偶数行,所以我在 EXE(python 脚本)中进行了更改,以从 1
打印到 6
然后失败了。
修改后的 EXE 输出:
1
2
3
4
5
6
Failed
现在 InputStreamReader 的输出是
Java 输出:
1
3
5
Failed
因为我认为我缺少奇数行。有人可以告诉我原因吗?
注:
The problem was due to reading the inputStream Twice sorry for the inconvenience caused. I am extremely sorry.
问题是因为读取了两次输入流
while ((line = br.readLine()) != null) {
line = br.readLine() # input stream read here twice
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}
问题由此而来。为了解决这个问题,我只读了一次 inputStream。
while ((line = br.readLine()) != null) {
System.out.println(line);
if(line.toLowerCase().contains("failed")){
#Apply business Rule.
}
}