Как да картографирате CSV записи към bean?

Търся библиотека на Java, която може да ми помогне да анализирам CSV файл, съдържащ записи, разделени с вертикална черта, и да създам екземпляри на моя bean клас от тях.

Разгледах няколко алтернативи като SuperCSV, OpenCSV, BeanIO, JFileHelper, jsefa, ... но нито една от тях изглежда няма необходимото.

Изисквания на библиотеката:

  1. поддържа записи с променлив брой полета
  2. осигурява достъп в стил итератор, така че файлът никога да не се зарежда изцяло в паметта
  3. поддържа съпоставяне на поле към действителния му тип, т.е. може да вземе поле за дата и да го постави java.util.Date в моя bean вместо низ
  4. позволете ми да предоставя моя собствен фабричен обект, от който да създам зърната, вместо да по подразбиране Class.newInstance()

Всички библиотеки, които разгледах, изглежда нямат изискване #4.

Мога да живея с отражение, но проблемът е, че той все още създава нов bean обект за всеки ред в CSV файла. Тъй като единственото нещо, което искам да направя с моя bean в този момент, е да го предам на моя слой за постоянство и да го съхраня в DB, ​​има смисъл да поставите няколко екземпляра на bean в пул и да създадете фабрика, която взема екземпляри от този басейн. По този начин мога да използвам повторно моите екземпляри и анализирането на CSV файл от 100 000 реда няма да доведе до 100 000 екземпляра, живеещи в паметта, докато не се появи GC.

Някой знае ли за библиотека, която може да се справи с всички тези изисквания?


person Jan Van den bosch    schedule 09.02.2012    source източник
comment
Имате ли доказателства, че създаването на нови копия е тясно място на производителността? JVM е изключително добър в рециклирането на краткотрайни обекти. Ако все още не сте го пробвали, направете го и едва тогава опитайте да оптимизирате.   -  person skaffman    schedule 09.02.2012
comment
Е, прав си: нямам доказателства. Ще накарам нещата да работят със SuperCSV (изглеждаше доста добре), но все пак ще взема алтернативи.   -  person Jan Van den bosch    schedule 09.02.2012


Отговори (1)


Това може да е алтернатива: https://github.com/org-tigris-jsapar/jsapar
Вероятно обаче няма да отговаря на изискване #4.

Тук можете да намерите по-изчерпателен списък с алтернативи: https://org-tigris-jsapar.github.io/jsapar/links

РЕДАКТИРАНЕ
От jsapar версия 1.8 вече е възможно да персонализирате създаването на Java обект във външен фабричен клас, така че предполагам, че изискване #4 вече също е спазено.

person stenix    schedule 13.11.2014