我正在使用以下代码:
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)将结果附加。我只需要在每次迭代中输出实际的一行即可。
答案 0 :(得分:0)
相当优雅的Kotlin式解决方案:
export default class ExportModal extends React.Component {
constructor(props) {
super(props);
this.state = {
roomIdNo: props.selectedRooms || [],
};
while语句等效于Java:
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()
在Kotlin中,您不能在语句内部分配变量,但是使用Also链,可以包含要同时执行的额外代码。 readLine之后的Elvis运算符(?)允许“ it”为空,以便执行最新的检查。这是避免崩溃的必要条件。