将print()输出重定向到String而不是stdout

时间:2019-06-11 13:42:40

标签: kotlin inputstream stdout

我正在尝试将对象的print()函数的标准输出重定向到String变量。

为此,我正在使用以下Java导入(在Kotlin内):

import java.io.PipedOutputStream
import java.io.PipedInputStream
import java.io.PrintStream

以及以下功能:

fun index(): String {

        val df_out = DataFrame.fromJson("https://jsonplaceholder.typicode.com/posts")
        val pipeOut = PipedOutputStream()
        val pipeIn = PipedInputStream(pipeOut)
        System.setOut(PrintStream(pipeOut));
        df_out.print(maxRows = 10)
        val dfAsStr = pipeIn.bufferedReader().use { it.readText() }
        return dfAsStr
    }

想法是将print()方法的输出捕获到PipedInputStream中,以便能够将其作为(已处理的)字符串返回。

此功能代码不会终止。

1 个答案:

答案 0 :(得分:1)

您可以尝试这个。如果我正确回答了您的问题。

fun index(): String {
    val df_out = DataFrame.fromJson("https://jsonplaceholder.typicode.com/posts")
    val outStream = ByteArrayOutputStream().apply { System.setOut(PrintStream(df_out)) }
    df_out.print(maxRows = 10)
    return outStream.toString()
}