【问题标题】:Best way to stream back HTTP-Response?流回 HTTP 响应的最佳方式?
【发布时间】:2016-02-14 01:44:54
【问题描述】:

我有一个 REST 服务,它可能必须从数据库返回超过 1000,000 行。我通过打开一个输出流来做到这一点。基本上,我从 HTTP-RESPONSE 获取 printwriter 并在从数据库中获取它时将其流式传输回来,而不是将所有内容存储在内存中然后返回。

这样的:-

 @Override
      public void processRow(ResultSet resultSet) throws SQLException {
         String data = resultSet.getString("data");
            printWriter.write(data);
            printWriter.flush();
         }
      }

我的问题是,我们是否通过在桶中冲洗来获得任何性能提升?类似于在字符串缓冲区中存储 5000 行,然后将其刷新而不是每行刷新。

【问题讨论】:

    标签: java stream streaming outputstream printwriter


    【解决方案1】:

    每次刷新都会使系统通过所有缓冲区将数据“刷新”到网络层,或者,这取决于您使用的库,甚至可能会阻塞,直到远程端确认数据已到达。这意味着将花费大量时间在 I/O 阻塞上,也就是“它会很慢”。

    我建议在此处删除刷新,创建一个相当小(512-8192 字节)的 BufferedOutputStream 并在其上创建 PrintWriter 并使用不同的缓冲区大小执行测量。

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2021-11-12
      • 2020-01-11
      • 2020-08-10
      • 2015-05-30
      相关资源
      最近更新 更多