方案:
我应该:
我必须保持简单。 有什么建议吗?
答案 0 :(得分:8)
转换不会更改对象占用的内存量。它只是改变了运行时类型。
如果你可以按行进行这些操作,那么只需在你读取一行的循环内立即进行操作。
while ((line = reader.readLine()) != null) {
line = process(line);
writer.println(line);
}
这样你每次只能在Java内存中只有一行而不是整个文件。
或者,如果您需要基于整个CSV文件执行这些操作(即,这些操作依赖于所有行),那么您最有效的选择是以真实的方式导入CSV文件SQL数据库然后使用SQL语句来更改数据,然后再将其导出到CSV文件。
答案 1 :(得分:3)
我建议使用MappedByteBuffer(来自NIO),您可以使用它来读取太大而无法放入内存的文件。 它只将文件的一个区域映射到内存中;一旦你读完这个区域(比如说,前10k),就要映射下一个区域,依此类推,直到你读完整个文件。 内存效率高,易于实现。
答案 2 :(得分:2)
Java Casts:喜欢
Object a = new String();
String b (String) a;
并不昂贵。 - 无论你是否施放弦乐或任何其他类型。
答案 3 :(得分:1)
你真正的价值添加是将每行读作一个字符串,这在Java中很容易。在它的字符串之后,用
分割每个逗号上的字符串是微不足道的 String[] row = parsedRow.split(",");
对于数组中的每个值,您将拥有一个String,然后可以对其进行操作。