You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中调用print(String)为何等待换行才向控制台输出内容?

Kotlin print 无实时输出问题原因
  • 代码层面的System.out.flush()调用逻辑正确,问题源于运行环境的输出缓冲机制,和Kotlin语言本身无关。
  • IntelliJ IDEA等集成开发环境的控制台默认启用行缓冲规则:仅当输出内容包含换行符\n、缓冲区占满、程序进程结束时,才会将缓存的内容批量打印到控制台,此时手动调用的flush操作会被IDE的缓冲层拦截,无法生效。
  • 原生终端环境下部分操作系统也默认开启行缓冲,无换行的短文本输出会被暂存到缓冲区,直到满足触发条件才会展示。
解决方法

IDE运行场景

打开对应运行配置的VM参数设置,添加参数-Dkotlin.io.stdout.flush.always=true,强制Kotlin标准输出每次写入后自动刷新缓冲。
如果仅需要临时验证效果,可在print语句后额外输出一个空字符触发缓冲刷新,示例代码如下:

fun main() {
    println("Start")
    var i = 1
    while (i <= 10) {
        Thread.sleep(500)
        print("... ")
        print('\u0000')
        System.out.flush()
        i++
    }
}

终端运行场景

执行程序前先运行stty -icanon min 1 time 0关闭终端行缓冲模式,程序运行结束后执行stty icanon恢复默认配置即可。

内容的提问来源于stack exchange,提问作者Baterka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:36:04