我有一个搜索功能,在该功能中,我可以通过searh按钮将实体的所有记录返回给用户,现在记录的数量是多少(现在,它可以搜索50,000条记录)。现在我正在尝试将所有这些记录下载到csv中。如果记录较少,则可以正常工作,但是当记录超过30,000时,它将抛出

编辑:-

解决方案:-使用了以下几行代码

            InputStream in = new ByteArrayInputStream(buffer.toString().getBytes("UTF-8"));
            ServletOutputStream out = response.getOutputStream();

           byte[] outputByte = new byte[4096];

             while(in.read(outputByte, 0, 4096) != -1)
                {
                   out.write(outputByte, 0, 4096);
                  }
         in.close();
            out.flush();
              out.close();*/

最佳答案

与其将所有内容写入内存缓冲区中的巨型文件,然后再对其进行内存字符串副本,不如从Writer中获取HttpServletResponse并将CSV直接写入客户端。这样,您可以将数据从网络刷新到客户端,而不必在发送整个数据之前将其两个完整副本保留在RAM中。

当然,也可以使堆变大!

10-06 09:15