У меня более 1 миллиона данных в БД. Мне нужно читать из 1000 строк БД одновременно и записывать их в OutputStream до тех пор, пока не будут возвращены данные. Я не уверен, сколько данных может быть. Так что я не знаю длину файла, пока не достигну конца данных.
Возможно ли, чтобы записывать данные в выходной поток партиями, которые должны передаваться в сеть одновременно. Я пытаюсь добиться здесь избегания из памяти. Если я сохраню 1 миллион данных в выходном потоке, то получится OOM. поэтому, чтобы избежать OOM, я пытаюсь записать данные в сеть, и они не должны храниться в какой-либо памяти JVM, они должны записывать в сеть, как только я их получу. То, что я написал код, пока здесь.
Примечание: это отдельный код.
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
String header = "Doc Timestamp,Internal DocID,DocType,Sender,Receiver,Routing Status,User Status,External DocID\n";
resp.setHeader("Content-Disposition", "attachment; filename="+"File.csv");
resp.setContentType("text/csv");
OutputStream stream = resp.getOutputStream();
stream.write(header.getBytes());
stream.flush();
for (int i = 0; i < 10000000; i++) {
String docTimeStamp = new Date().toString();
String docid = UUID.randomUUID().toString();
String docType = "ICSCSRin";
String sender = "ACC15796_CWS";
String receiver = "ACC15794_CWS";
String routingStatus = "DONE W/ ERRORS";
String userStatus = "CWS POST_PROCESS";
String snrf = "CWS_TES";
StringBuffer str = new StringBuffer();
str.append(docTimeStamp).append(",").append(docid).append(",").append(docType).append(",").append(sender).append(",").append(receiver).append(",").append(routingStatus).append(",").append(userStatus).append(",").append(snrf).append("\n");
stream.write(str.toString().getBytes());
}
stream.close();
}