我有一个空格分隔的数据文件,其中包含以下格式的 450 万个条目
CO_1 A 0 0 0 0 1
CO_2 A 0 0 0 0 1
该数据文件用作自组织映射 (SOM)算法的输入,该算法迭代该文件 100 次(在我的情况下)。
我使用以下 readFile 函数将文件完全复制到临时字符串中,并将字符串传递给 SOM 算法。
public String readFile()
{
String temp = "";
try
{
FileReader file = new FileReader(FILE_LOCATION);
BR = new BufferedReader(file);
String strLine = null;
while((strLine = BR.readLine()) != null)
{
temp += strLine + "\n";
}
}
catch(Exception e)
{
}
return temp;
}
我怎么感觉上述方法给内存带来了沉重的负担并减慢了可能导致内存溢出的迭代。目前,我在分配了 30GB 内存的集群中运行此代码,并且执行甚至没有完成大约 36 个小时的单次迭代。
我无法部分读取文件(如以行块的形式),因为一旦完成初始块,SOM 将不得不轮询数据,这可能会导致更复杂的情况。
任何想法我可以如何改进这一点,以便我可以成功地迭代 450 万个条目 100 次。
编辑
仅使用上述方法将整个文件读入字符串一次。然后在 100 次迭代中使用字符串变量。但是,每次使用字符串标记器来处理文件中的每一行 * 迭代次数。