铸造昂贵的操作?

And*_*anu 5 java file

场景:

  • 我正在解析一个大文件(字符文件).例如.csv文件(不完全是我的情况)
  • 我无法将整个文件保存在内存中.所以我必须实施一个缓冲策略.
  • 我想构建一个通用的处理程序,它将在内存中保持一定数量的行(如Strings).如果需要,此处理程序在删除不需要的行时获取其他行.
  • 在这个处理程序上,我将构建一个解析器,它将行转换为Java对象并对这些对象进行更改.完成更改(更新对象上的某些字段)后,将更改保留回文件.

我应该:

  • 不是将缓冲区保持为字符串数组,而应该将缓冲区直接保存为对象(进行单个转换)?要么...
  • 将缓冲区保持为行,每次我需要对缓冲区进行操作,将信息转换为正确的对象,进行更改,将更改保留回文件.顺序操作需要补充演员.

我必须保持简单.有什么建议 ?

Bal*_*usC 8

强制转换不会更改对象占用的内存量.它只是改变了运行时类型.

如果您可以按行进行这些操作,那么只需在循环内执行操作即可读取单行.

while ((line = reader.readLine()) != null) {
    line = process(line);
    writer.println(line);
}
Run Code Online (Sandbox Code Playgroud)

这样,您每次只能在Java内存中只有一行而不是整个文件.

或者,如果您需要基于整个CSV文件执行这些操作(即,这些操作依赖于所有行),那么最有效的方法是将CSV文件导入真实的SQL数据库,然后使用SQL语句来更改数据,然后再次将其导出为CSV文件.