Запись в XML файл происходит долго
Подскажите пожалуйста можно ли ускорить запись в XML файл, может быть есть другой способ записи, более быстрый?
public void test(List<Zapis> zapisList) {
try (FileOutputStream out = new FileOutputStream(AppConstants.filePath + "file.xml")) {
writeXML(out, zapisList);
} catch (XMLStreamException | IOException e) {
throw new RuntimeException(e);
}
}
Метод записи
private void writeXML(OutputStream outputStream, List<Zapis> zapisList) throws XMLStreamException {
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = factory.createXMLStreamWriter(outputStream);
writer.writeStartDocument("utf-8", "1.0");
writer.writeStartElement("zl_list");
Zglv zglv = new Zglv("1", "A", "1.14", UtilDate.getCurrentDate(), yearMonth);
WriteXmlSegments.writeZglv(writer, zglv);
for (Zapis zapis : zapisList) {
WriteXmlSegments.writeZapis(writer, zapis);
}
for (Vrachi vrachi : vrachiList) {
WriteXmlSegments.writeVrachi(writer, vrachi);
}
writer.writeEndElement();
writer.writeEndDocument();
writer.flush();
writer.close();
}
В классе WriteXmlSegments тоже похожие методы, для записи сегментов. Если записей много (30000 тыс. например) долго идет запись.
Ответы (1 шт):
Автор решения: SergeyMih
→ Ссылка
Как советовали выше использовал BufferedOutputStream , стало быстрее.
public void createFile(List<Zapis> zapisList) {
try (FileOutputStream out = new FileOutputStream(AppConstants.filePath + AppConstants.FILE_NAME + yearMonth + ".xml");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out)) {
writeXML(bufferedOutputStream, ZapisList);
} catch (XMLStreamException | IOException e) {
Platform.runLater(() -> {
mainController.getLogs().appendText(e.toString());
});
}
}
private void writeXML(BufferedOutputStream outputStream, List<Zapis> zapisList) throws XMLStreamException {
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = factory.createXMLStreamWriter(outputStream, "UTF-8");
writer.writeStartDocument("utf-8", "1.0");
writer.writeStartElement("list");
Zglv zglv = new Zglv("1", "A", "1.14", UtilDate.getCurrentDate(), "file" + yearMonth);
WriteXmlSegments.writeZglv(writer, zglv);
for (Zapis zapis : zapisList) {
WriteXmlSegments.writeZapis(writer, zapis);
}
for (Vrachi vrachi : vrachiList) {
WriteXmlSegments.writeVrachi(writer, vrachi);
}
writer.writeEndElement();
writer.writeEndDocument();
writer.flush();
writer.close();
}