У нас запущено приложение Java, которое обрабатывает большой объем данных и затем записывает их в файлы CSV. Мы заметили, что около 2% написанных строк искажены, и мы не знаем, почему.
Мы используем следующую функцию для написания строк:
static void writeLineToCSV(List<String> fields, Writer csvWriter) throws IOException {
StringBuilder line = new StringBuilder();
for (int i = 0; i < fields.size() - 1; i++) line.append(fields.get(i)).append(",");
line.append(fields.get(fields.size() - 1)).append("\n");
csvWriter.write(line.toString());
csvWriter.flush();
}
Что приводит к появлению искаженных строк следующим образом:
2018-09-21T23:00:11.555Z,1537570811000,-7900,0.57642,39,0.57585,...
2018-09-21T23:00:11.917Z,1537570811000,-7900,0.57642,39,0.57585,...
2018-09-21T23:00:14592322,0.57377,-100,0.57644,1178.59788311,0.57375,...
2018-09-21T23:00:10.041Z,1537570810000,-4691.50311435,0.576,...
2018-09-21T23:00:10.041Z,1537570810000,-4691.50311435,0.576,...
Обратите внимание, что в третьей строке по какой-то причине первое и второе поля искажены вместе с разделительной запятой, оставшейся без следа.
РЕДАКТИРОВАТЬ: для завершения, схема файла CSV: Instant.toString(), timestamp (long), BigDecimal, ..., BigDecimal