如何在Android应用程序中获取每行进程的输出?

问题描述 投票:0回答:1

我正在使用此代码:

var reader: Int = 0
val buffer = CharArray(4096)
var output = StringBuilder()
val process = processBuilder.start()
var inputStream =  BufferedReader(InputStreamReader(process.getInputStream()));

while ({ reader = inputStream.read(buffer); reader }() > 0) {
       output.append(buffer, 0, reader)
       println("Debug: " + output.toString())
      }
       inputStream.close()
       process.waitFor()

它工作正常,但我有两个问题使其无法满足我的需求:

1)它不会实时检索每一行。它缓冲实际输出中的一些行,并在每个循环中显示它们。

2) 附上结果。我只需要每次迭代时的实际单行输出。

android kotlin output processbuilder
1个回答
4
投票

相当优雅的 Kotlin 式解决方案:

var output: String = ""
val process = processBuilder.start()                 
val inputStream =  BufferedReader(InputStreamReader(process.getInputStream()))
while ( inputStream.readLine()?.also { output = it } != null) {
  println("Debug: " + output)
}
inputStream.close()
process.waitFor()

while语句相当于Java的:

while ( (output = inputStream.readLine()) != null) {
 println("Debug: " + output)
}

在 Kotlin 中,您不能在语句内分配变量,但使用 is 链,您可以包含要同时执行的额外代码。 readLine 之后的 Elvis 运算符 (?) 允许“it”变为 null,以便执行最新的检查。这是避免崩溃所必需的。

© www.soinside.com 2019 - 2024. All rights reserved.