如何在Spring Boot中强制刷新OutputStream / Writer

时间:2017-05-15 11:23:32

标签: java spring spring-mvc spring-boot

我有一个Spring MVC控制器直接写入Writer

@GetMapping("/delay")
void delay(final java.io.Writer writer) throws IOException, InterruptedException {
    for (int i = 0; i < 10000; i++) {
        writer.write(String.valueOf(i));
        writer.write(",");
        writer.flush();

        Thread.sleep(10);
    }
}

当我使用curl调用此方法时,尽管在每次循环迭代中调用flush(),但只有Writer在写入1024字节时才会刷新。有没有办法在每次循环迭代中强制刷新Writer

2 个答案:

答案 0 :(得分:1)

在我看来,CoyoteWriter冲洗效果很好。我想一个合适的单元测试会更有说服力,用Curl调用一个控制器。

我用curl和Web浏览器天真地测试了你的代码,实际上,curl正在以批量输出响应,而浏览器在正在编写时正确地读取响应。

答案 1 :(得分:0)

似乎--no-buffer正在进行缓存,选项-NAAB BT 2 5 5 YUT HYT 89 52 3 JUI 10 2 3 HYIU 2 5 6 YHT JU 25 63 2 )禁用缓冲输出流。