Java 将类似apachecsv的字符串解析为对象

Java 将类似apachecsv的字符串解析为对象,java,apache,parsing,csv,httpclient,Java,Apache,Parsing,Csv,Httpclient,我试图以最快、最有效的方式解析通过ApacheHttpClient获得的数据 响应返回的数据是字符串,但采用类似CSV的格式: e、 g.字符串如下所示: date, price, status, ... 2014-02-05, 102.22, OK,... 2014-02-05, NULL, OK 我曾想过获取字符串并手动解析它,但这可能太慢了,因为我必须对多个请求执行此操作 另外,返回的数据来自一个源,大约23000行,我可能需要解析几个源 我还将数据存储在以下类型的哈希映射中: Map

我试图以最快、最有效的方式解析通过ApacheHttpClient获得的数据

响应返回的数据是字符串,但采用类似CSV的格式:

e、 g.字符串如下所示:

date, price, status, ...

2014-02-05, 102.22, OK,...
2014-02-05, NULL, OK
我曾想过获取字符串并手动解析它,但这可能太慢了,因为我必须对多个请求执行此操作

另外,返回的数据来自一个源,大约23000行,我可能需要解析几个源

我还将数据存储在以下类型的哈希映射中:

Map<String, Map<String, MyObject>>
Map
其中,key是源名称,value是一个以解析对象为键的映射

所以我有两个问题,将23000行文件解析为对象的最佳方法,以及存储它的最佳方法

我尝试了一个csv解析器,但是double的如果不存在则存储为NULL而不是0,因此我需要手动解析它


谢谢

这是一个意见问题,但我的0.02美元价值是:1)通过阅读每一行并在逗号上拆分来解析它。这是唯一的办法。或者,使用一个预构建库或实用程序来为您完成这项工作,但由于它们在本质上必须更“通用”,因此它们通常没有那么快,因此需要更多的代码。2) 我会使用数据库,而不是传统的关系数据库或NoSql数据库,比如MongoDB。如果速度是你所追求的,并且你不关心内存占用,那么考虑内存中的DB。这样你就拥有了查询语言的能力,可以把东西拿出来。谢谢,我会坚持选择一。在数据库中存储数据对我来说不太可行。有人有更多的建议吗?长期存储还是只使用数据类型进行查找?如果是前者,为什么不以相同的CSV格式存储呢。这样您就可以使用相同的解析器。如果是后者,则取决于您如何使用数据。我会说使用一个“域”对象来存储每个“记录”,即CSV行,然后使用一个键为记录的自然主键的映射。我的问题更多的是关于您试图实现什么。您是否正在尝试解决记忆/缓存大量数据的问题?内存占用更多的是一个问题还是查找性能?数据是否长期存在?您是否试图最小化从原始源读取的数据?您有复杂的搜索需求,还是简单的主键类型查找?这些问题的答案都有可能是什么。不过,要回答上一个问题,您可以使用地图集列表中的地图。收集起始级别仅受资源(内存)的限制。处理文件中文本数据的最快方法是直接向上的子字符串。第二快的是简单拆分。CSV数据的问题在于,这两种方法在技术上都不可行,因为CSV文件可能具有可变长度字段(不能在设置的边界上使用子字符串),并且可能在转义字段中使用逗号(不能简单地使用逗号拆分)。如果您知道您的输入数据永远不会出现在第二种情况下,我建议使用
String
split()
函数<代码>地图s最适合快速查找。为了提高速度,您可能需要研究一个带有缓存的单例DAO,以便在中读取它。