用Java解析大型CSV文件的最快,最有效的方法

时间:2019-06-05 02:16:56

标签: csv parsing java-8 opencsv

我想尽可能快,高效地解析大型CSV文件。

当前,我正在使用openCSV库解析我的CSV文件,但解析包含10776条记录和24条记录的CSV文件大约需要10秒 标题,我想解析一个包含数百万条记录的CSV文件。

<dependency>
  <groupId>com.opencsv</groupId>
  <artifactId>opencsv</artifactId>
  <version>4.1</version>
</dependency>

我正在使用下面的代码段来解析openCSV库。

public List<?> convertStreamtoObject(InputStream inputStream, Class clazz) throws IOException {
        HeaderColumnNameMappingStrategy ms = new HeaderColumnNameMappingStrategy();
        ms.setType(clazz);
        Reader reader = new InputStreamReader(inputStream);

        CsvToBean cb = new CsvToBeanBuilder(reader)
                .withType(clazz)
                .withMappingStrategy(ms)
                .withSkipLines(0)
                .withSeparator('|')
                .withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
                .withThrowExceptions(true)
                .build();
        List<?> parsedData = cb.parse();
        inputStream.close();
        reader.close();
        return parsedData;
    }

我正在寻找另一种方式来分析CSV文件并在更短的时间内记录数百万条记录的建议。

---更新了答案----

 Reader reader = new InputStreamReader(in);
        CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
                .withFirstRecordAsHeader()
                .withDelimiter('|')
                .withIgnoreHeaderCase()
                .withTrim());
        List<CSVRecord> recordList = csvParser.getRecords();
        for (CSVRecord csvRecord : recordList) {
             csvRecord.get("headername");
         }

1 个答案:

答案 0 :(得分:0)

答案

struct std::hash<>