Я смотрю на экспорт CSV из Java-приложения, используя JBoss и PrimeFaces.Экспорт - это прямой вызов из таблицы данных на веб-странице в реализацию PrimeFaces DataExporter и CSVExporter.Я могу проследить все это достаточно разумно, но это начинается с получения типа писателя из внешнего контекста контекста PrimeFaces
public void export(FacesContext context,...
ExternalContext externalContext = context.getExternalContext();
configureResponse(externalContext, filename, encodingType);
Writer writer = externalContext.getResponseOutputWriter();
...
else {
exportAll(context, table, writer);
}
...
writer.flush();
writer.close();
}
Мне было интересно, как я могу найти конкретный класс писателя?
Моя конечная игра в этом заключается в том, чтобы просто понять, весь ли экспорт удерживается в памяти кучи до завершения экспорта, что, как я подозреваю, происходит, или есть какой-то фоновый процесс, который мог бы его запустить?
Итак, я предполагаю, что очистка в конце означает, что файл не записан до конца, но меня просто заинтересовал тот факт, что он выполняет построчный вызов приведения к PrintWriter
protected void exportAll(FacesContext context, DataTable table, Object document) {
for(int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
exportRow(table, document, rowIndex);
}
}
}
protected void exportRow(DataTable table, Object document, int rowIndex) {
table.setRowIndex(rowIndex);
...
exportCells(table, document);
...
}
@Override
protected void exportCells(DataTable table, Object document) {
PrintWriter writer = (PrintWriter) document;
for (UIColumn col : table.getColumns()) {
'write cell (no flush) }
}
}
Есть много сообщений о людях, имеющих проблемы с Excel, но ни одного с CSV.Это просто потому, что процесс csv намного менее требователен к ресурсам, или я неправильно его читаю, а память между каждой строкой записи очищается?