简单的问题:任何想法应该如何正确完成?我有3个包含大量信息的txt文件,我创建了一个类,负责从txt文件中读取数据并将数据作为DTO组件列表返回(是的,信息可以捆绑为这样的逻辑单元) ,取决于txt文件,之后客户端将使用DAO并将使用此类列表并将数据插入本地数据库(sqlite)。我担心的是,拥有这样的List可能是内存要求,我是否应该避免使用这样的列表并以某种方式直接使用dao对象插入这些数据而不将数据捆绑到dto中,最后是这样的列表?
答案 0 :(得分:0)
你问一个好问题并自己部分回答。 是的,确定如果您确实有很多信息,则不应从文件中读取所有信息,然后将其存储在数据库中。你应该读取chunk-by chunk信息,或者甚至可以(从应用程序的角度来看)逐行读取信息,并存储每一行是DB。
在这种情况下,您只需要随时为一行记忆。
您可以按照以下方式设计应用程序。
Iterable<Row>
Iterable<Row>
并在DB中存储行的数据库编写器在这种情况下,负责读写文件的逻辑将被封装到某些模块中,不需要额外的内存消耗。
答案 1 :(得分:0)
不返回列表,而是返回像此示例中的迭代器:Iterating over the content of a text file line by line - is there a best practice? (vs. PMD's AssignmentInOperand)
你必须修改这个迭代器以返回你的DTO而不是String:
for(MyDTO line : new BufferedReaderIterator(br)){
// do some work
}
现在,您将逐行迭代文件,但是您将返回DTO而不是返回行。这种解决方案对内存的影响很小。