Giter Site home page Giter Site logo

javacsvcomparison's Introduction

Parsing non-standard CSV with different Java CSV libraries

Unfortunately, there is no real industry standard for CSV files. The closest thing we do currently have (since 2005) is RFC 4180. Working with non-standardized data often comes with surprises, but what exactly happens when parsing CSV data that doesn't match this RFC?

This project is about to find that out...

This benchmark project was created for the development of FastCSV.

Note

Since this comparison uses the result of FastCSV as a reference value (expected result), the comparison is highly biased.

Implementations under test

  • Commons CSV 1.10.0
  • CSVeed 0.7.5
  • FastCSV 3.0.0
  • Jackson CSV 2.16.1
  • Java CSV 2.0
  • Opencsv 5.9
  • sesseltjonna-csv 1.0.25
  • SimpleFlatMapper 8.2.3
  • Super CSV 2.4.0
  • Univocity 2.9.1

Execute

./gradlew run

Results

To have results which are unambiguous to compare (even with multi-line records), we need to use some special characters. The libraries itself don't get in touch with these special characters as the conversion is done from the outside.

Character Usage
Space
Carriage return
Line feed
[SE] Skip emtpy rows
New row
New column
Empty field
Empty list

Unexpected results in Commons CSV

Input Flags Commons CSV Expected Implemented as expected by
A,"B 💥 UncheckedIOException A↷B FastCSV, JavaCSV, Simpleflatmapper, Univocity
"A,B 💥 UncheckedIOException A,B FastCSV, JavaCSV, Simpleflatmapper, Univocity
"D"␣ D D␣ FastCSV, Opencsv, SuperCSV
"A,B"␣ A,B A,B␣ FastCSV, SuperCSV
"D"z 💥 UncheckedIOException Dz FastCSV, Opencsv, SuperCSV
"A,B"z 💥 UncheckedIOException A,Bz FastCSV, SuperCSV

Unexpected results in CSVeed

Input Flags CSVeed Expected Implemented as expected by
Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV, Univocity
␣,␣ ◯↷◯ ␣↷␣ Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV, Univocity
,␣ ◯↷◯ ◯↷␣ Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV, Univocity
␣D D ␣D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV, Univocity
␣D␣,␣D␣ D↷D ␣D␣↷␣D␣ Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV, Univocity
A,␊B 💥 CsvException A↷◯⏎B Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
␣, ◯↷◯ ␣↷◯ Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV, Univocity
␣,␊D 💥 CsvException ␣↷◯⏎D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
D␊ D⏎◯ D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV, Univocity
D␍ D⏎◯ D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV
D␍␊ D⏎◯ D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV
A,"B 💥 CsvException A↷B FastCSV, JavaCSV, Simpleflatmapper, Univocity
A,B" 💥 CsvException A↷B" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
"A,B 💥 CsvException A,B FastCSV, JavaCSV, Simpleflatmapper, Univocity
"A␍␊B" A␍B A␍␊B Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
A␊B,C 💥 CsvException A⏎B↷C Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
A,B␊C 💥 CsvException A↷B⏎C Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
A␊;B,C␊D 💥 CsvException A⏎;B↷C⏎D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
"D"␣ D D␣ FastCSV, Opencsv, SuperCSV
"A,B"␣ A,B A,B␣ FastCSV, SuperCSV
␣"D" D ␣"D" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
␣"D"␣ D ␣"D"␣ Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
"D"z 💥 CsvException Dz FastCSV, Opencsv, SuperCSV
"A,B"z 💥 CsvException A,Bz FastCSV, SuperCSV
z"D" 💥 CsvException z"D" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
z"A,B" 💥 CsvException z"A↷B" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
z"D"z 💥 CsvException z"D"z Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity

Unexpected results in JacksonCSV

Input Flags JacksonCSV Expected Implemented as expected by
A,"B 💥 RuntimeJsonMappingException A↷B FastCSV, JavaCSV, Simpleflatmapper, Univocity
"A,B 💥 RuntimeJsonMappingException A,B FastCSV, JavaCSV, Simpleflatmapper, Univocity
"D"␣ D D␣ FastCSV, Opencsv, SuperCSV
"A,B"␣ A,B A,B␣ FastCSV, SuperCSV
"D"z 💥 RuntimeJsonMappingException Dz FastCSV, Opencsv, SuperCSV
"A,B"z 💥 RuntimeJsonMappingException A,Bz FastCSV, SuperCSV

Unexpected results in JavaCSV

Input Flags JavaCSV Expected Implemented as expected by
"D"␣ D D␣ FastCSV, Opencsv, SuperCSV
"A,B"␣ A,B A,B␣ FastCSV, SuperCSV
"D"z D Dz FastCSV, Opencsv, SuperCSV
"A,B"z A,B A,Bz FastCSV, SuperCSV

Unexpected results in Opencsv

Input Flags Opencsv Expected Implemented as expected by
A,"B 💥 CsvMalformedLineException A↷B FastCSV, JavaCSV, Simpleflatmapper, Univocity
A,B" 💥 CsvMalformedLineException A↷B" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
"A,B 💥 CsvMalformedLineException A,B FastCSV, JavaCSV, Simpleflatmapper, Univocity
"A␍B" A␊B A␍B Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
"A␍␊B" A␊B A␍␊B Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
"A,B"␣ A,B"␣ A,B␣ FastCSV, SuperCSV
␣"D" ␣D ␣"D" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
␣"D"␣ ␣D"␣ ␣"D"␣ Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
"A,B"z A,B"z A,Bz FastCSV, SuperCSV
z"D" zD z"D" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
z"A,B" zA,B z"A↷B" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
z"D"z zD"z z"D"z Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity

Unexpected results in sesseltjonna-csv

Input Flags sesseltjonna-csv Expected Implemented as expected by
A,␊B 💥 CsvException A↷◯⏎B Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
␣,␊D 💥 CsvException ␣↷◯⏎D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
A␍B A␍B A⏎B Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV
␍D ␍D ◯⏎D Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV
A,"B 💥 CsvBuilderException A↷B FastCSV, JavaCSV, Simpleflatmapper, Univocity
"A,B 💥 CsvBuilderException A,B FastCSV, JavaCSV, Simpleflatmapper, Univocity
A␊B,C A⏎B,C A⏎B↷C Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
A,B␊C 💥 CsvException A↷B⏎C Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
A␊;B,C␊D A⏎;B,C⏎D A⏎;B↷C⏎D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV, Univocity
"D"␣ D D␣ FastCSV, Opencsv, SuperCSV
"A,B"␣ A,B A,B␣ FastCSV, SuperCSV
"D"z D Dz FastCSV, Opencsv, SuperCSV
"A,B"z A,B A,Bz FastCSV, SuperCSV

Unexpected results in Simpleflatmapper

Input Flags Simpleflatmapper Expected Implemented as expected by
"D"␣ D"␣ D␣ FastCSV, Opencsv, SuperCSV
"A,B"␣ A,B"␣ A,B␣ FastCSV, SuperCSV
"D"z D"z Dz FastCSV, Opencsv, SuperCSV
"A,B"z A,B"z A,Bz FastCSV, SuperCSV

Unexpected results in SuperCSV

Input Flags SuperCSV Expected Implemented as expected by
A,"B 💥 SuperCsvException A↷B FastCSV, JavaCSV, Simpleflatmapper, Univocity
A,B" 💥 SuperCsvException A↷B" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
"A,B 💥 SuperCsvException A,B FastCSV, JavaCSV, Simpleflatmapper, Univocity
"A␍B" A␊B A␍B Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
"A␍␊B" A␊B A␍␊B Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
␣"D" ␣D ␣"D" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
␣"D"␣ ␣D␣ ␣"D"␣ Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
z"D" zD z"D" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
z"A,B" zA,B z"A↷B" Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity
z"D"z zDz z"D"z Commons CSV, FastCSV, JacksonCSV, JavaCSV, sesseltjonna-csv, Simpleflatmapper, Univocity

Unexpected results in Univocity

Input Flags Univocity Expected Implemented as expected by
A␍B A␍B A⏎B Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV
D␍ D␍ D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV
␍D ␍D ◯⏎D Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, Opencsv, Simpleflatmapper, SuperCSV
␍D [SE] ␍D D Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, SuperCSV
A␍␊B A␍⏎B A⏎B Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV
D␍␊ D␍ D Commons CSV, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV
␍␊D ␍⏎D ◯⏎D Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, Opencsv, sesseltjonna-csv, Simpleflatmapper, SuperCSV
␍␊D [SE] ␍⏎D D Commons CSV, CSVeed, FastCSV, JacksonCSV, JavaCSV, SuperCSV
"D"␣ D D␣ FastCSV, Opencsv, SuperCSV
"A,B"␣ A,B A,B␣ FastCSV, SuperCSV
"D"z "D"z Dz FastCSV, Opencsv, SuperCSV
"A,B"z "A,B"z A,Bz FastCSV, SuperCSV

Big picture

Input Flags Expected Commons CSV CSVeed FastCSV JacksonCSV JavaCSV Opencsv sesseltjonna-csv Simpleflatmapper SuperCSV Univocity
D D
D,D D↷D
,D ◯↷D
␣,␣ ␣↷␣
,␣ ◯↷␣
␣D ␣D
␣D␣,␣D␣ ␣D␣↷␣D␣
D, D↷◯
A,␊B A↷◯⏎B 💥 💥
␣, ␣↷◯
␣,␊D ␣↷◯⏎D 💥 💥
A␊B A⏎B
D␊ D
␊D ◯⏎D
␊D [SE] D
A␍B A⏎B
D␍ D
␍D ◯⏎D
␍D [SE] D
A␍␊B A⏎B
D␍␊ D
␍␊D ◯⏎D
␍␊D [SE] D
"␣D␣" ␣D␣
"D" D
"D",D D↷D
D,"D" D↷D
A,"B A↷B 💥 💥 💥 💥 💥 💥
A,B" A↷B" 💥 💥 💥
"A,B A,B 💥 💥 💥 💥 💥 💥
"""D" "D
"D""" D"
"A""B" A"B
"A␊B" A␊B
"A␍B" A␍B
"A␍␊B" A␍␊B
A␊B,C A⏎B↷C 💥
A,B␊C A↷B⏎C 💥 💥
A␊;B,C␊D A⏎;B↷C⏎D 💥
"D"␣ D␣
"A,B"␣ A,B␣
␣"D" ␣"D"
␣"D"␣ ␣"D"␣
"D"z Dz 💥 💥 💥
"A,B"z A,Bz 💥 💥 💥
z"D" z"D" 💥
z"A,B" z"A↷B" 💥
z"D"z z"D"z 💥

javacsvcomparison's People

Contributors

osiegmar avatar tomwhoiscontrary avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.