Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将CSV记录映射到bean?_Java_Csv_Annotations_Deserialization - Fatal编程技术网

Java 如何将CSV记录映射到bean?

Java 如何将CSV记录映射到bean?,java,csv,annotations,deserialization,Java,Csv,Annotations,Deserialization,我正在寻找一个Java库,它可以帮助我解析包含管道分隔记录的CSV文件,并从中创建bean类的实例 我已经研究了几个备选方案,如SuperCSV、OpenCSV、BeanIO、JFileHelper、jsefa等等。。。但他们两人似乎都不具备所需的条件 图书馆的要求: 支持具有可变字段数的记录 提供迭代器样式的访问,因此文件永远不会完全加载到内存中 支持将一个字段映射到它的实际类型,也就是说,能够获取一个日期字段,并将其作为java.util.date而不是字符串放入我的bean中 让我提供自己

我正在寻找一个Java库,它可以帮助我解析包含管道分隔记录的CSV文件,并从中创建bean类的实例

我已经研究了几个备选方案,如SuperCSV、OpenCSV、BeanIO、JFileHelper、jsefa等等。。。但他们两人似乎都不具备所需的条件

图书馆的要求:

  • 支持具有可变字段数的记录
  • 提供迭代器样式的访问,因此文件永远不会完全加载到内存中
  • 支持将一个字段映射到它的实际类型,也就是说,能够获取一个日期字段,并将其作为java.util.date而不是字符串放入我的bean中
  • 让我提供自己的工厂对象来创建bean,而不是默认为Class.newInstance()
  • 我调查过的所有图书馆似乎都缺乏需求

    我可以接受反射,但问题是它仍然为CSV文件中的每一行创建一个新的bean对象。由于此时我想对bean做的唯一一件事就是将其传递到持久层并存储在DB中,所以将几个bean实例放入一个池中并创建一个从该池中获取实例的工厂是有意义的。通过这种方式,我可以重复使用我的实例,并且在GC出现之前,解析100000行CSV文件不会导致100000个实例存在于内存中


    有人知道有一个库可以处理所有这些需求吗?

    这可能是另一种选择:
    不过,它可能达不到要求4

    在这里,您可以找到更全面的备选方案列表:

    编辑

    从jsapar版本1.8开始,现在可以在外部工厂类中自定义Java对象创建,因此我想现在也满足了要求4。

    这可能是一种替代方法:
    不过,它可能达不到要求4

    在这里,您可以找到更全面的备选方案列表:

    编辑

    从jsapar 1.8版开始,现在可以在外部工厂类中自定义Java对象创建,因此我想现在也满足了要求#4。

    您是否有证据表明创建新实例是性能瓶颈?JVM非常擅长回收短期对象。如果你还没有尝试过,那么就这样做,然后再尝试优化。好吧,你是对的:我没有证据。我将使用SuperSV(看起来还不错),但我仍然会选择其他方法。您是否有证据表明创建新实例是性能瓶颈?JVM非常擅长回收短期对象。如果你还没有尝试过,那么就这样做,然后再尝试优化。好吧,你是对的:我没有证据。我会让SuperCSV工作(看起来还不错),但我还是会选择其他的。