Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回HTTP响应的最佳方法?_Java_Stream_Streaming_Outputstream_Printwriter - Fatal编程技术网

Java 返回HTTP响应的最佳方法?

Java 返回HTTP响应的最佳方法?,java,stream,streaming,outputstream,printwriter,Java,Stream,Streaming,Outputstream,Printwriter,我有一个REST服务,它可能必须从数据库返回超过1000000行。我是通过打开一个输出流来实现的。基本上,我是从HTTP-RESPONSE获取printwriter,并在从数据库获取时将其流式返回,而不是将所有内容存储在内存中然后返回 像这样的事情:- @Override public void processRow(ResultSet resultSet) throws SQLException { String data = resultSet.getStri

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

像这样的事情:-

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

我的问题是,通过在桶中冲水,我们是否会获得性能提升?类似于在一个stringbuffer中存储5000行,然后将其刷新,而不是每行刷新。

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

我建议在这里删除flush,创建一个小的缓冲输出流(512-8192字节),并在其上创建PrintWriter,并使用不同的缓冲区大小执行测量