我正在寻找一个Java库,它可以帮助我解析包含管道分隔记录的CSV文件,并从它们中创建我的bean类的实例。如何将CSV记录映射到bean?
我已经研究过几个替代方案,例如SuperCSV,OpenCSV,BeanIO,JFileHelper,jsefa等等,但是他们都不知道如何做。图书馆的
要求:
- 与字段的可变数目支撑记录
- 提供迭代式的访问,因此该文件是永远不会完全加载到内存中
- 支持映射到其实际场类型,即能够采取一个日期字段,并把它一个java.util.Date到我的豆,而不是一个字符串
- 让我提供我自己的工厂对象来创建的豆,而不是违约到Class.newInstance()
我看过的所有库似乎缺乏要求#4。
我可以接受反射,但问题是它仍然为CSV文件中的每一行创建一个新的bean对象。由于我现在想要对我的bean做的唯一事情是将它传递给我的持久层并将其存储在数据库中,因此将两个bean实例放入一个池并创建一个工厂,这个池。通过这种方式,我可以重新使用我的实例,并且在GC出现之前解析100000行CSV文件不会导致100000个实例存在内存中。
有谁知道可以处理所有这些需求的库吗?
您是否有证据表明创建新实例是性能瓶颈? JVM非常擅长回收短暂的对象。如果您还没有尝试过,那么请尝试优化。 – skaffman 2012-02-09 10:55:53
嗯,你是对的:我没有证据。我会用SuperCSV(看起来很好)工作,但我仍然会采取其他选择。 – 2012-02-09 11:51:20