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

How to get per line process output in an android app?

我正在使用此代码:

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()

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

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

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

相当优雅Kotlin-ish解决方案:

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