StringBuilder иногда приводит к искаженным строкам - PullRequest
0 голосов
/ 19 ноября 2018

У нас запущено приложение 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

...