我有一个搜索功能,在该功能中,我可以通过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中。
当然,也可以使堆变大!