У меня есть файл ASCII 538 МБ с 16807 строками, и каждая строка имеет 16807 0 и 1 сек, разделенных пробелом. Я хочу взять все эти значения и сохранить их в списке списков, чтобы сохранить каждую строку в новом списке.Чтение и хранение содержимого большого файла ASCII
В предыдущем проекте я сделал приведенный ниже код для текстового файла, но с файлом ASCII он бросает мне ошибку Java-кучу пространства.
ArrayList<ArrayList<String>> listOflists = new ArrayList<ArrayList<String>>();
FileInputStream fstream = new FileInputStream("C:\Users...\file.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while (true)
{
String line = br.readLine();
if (line == null) {
break;
}
Scanner tokenize = new Scanner(line);
ArrayList<String> tokens = new ArrayList<String>();
while (tokenize.hasNext())
{
tokens.add(tokenize.next());
}
listOflists.add(tokens);
}
br.close();
Теперь я сделал этот код, но снова выбросил мне ошибку Java heap space.
String inputFile = "C:\Users...\file.txt";
LinkedList<LinkedList<Character>> charList = new LinkedList<LinkedList<Character>>();
File file = new File(inputFile);
Reader reader = new FileReader(file);
char val = 0;
int c;
int iLine = 0;
while((c = reader.read()) != -1) {
val = (char)c;
charList.add(new LinkedList<Character>());
if((c == 48) || (c == 49)){ //ascii code for 0 is 48 and for 1 is 49
charList.get(iLine).add(val);
}
if(c == 92){ //ascii code for "/" is 92 as to know when it changes line
iLine++;
}
}
reader.close();
Любые идеи?
Увеличьте память кучи или храните его в меньшем объеме памяти. – Kayaman
Я увеличиваю память кучи с этим, -Xmx1024m, но ошибка остается, и цель вопроса состоит в том, чтобы найти меньшее количество памяти, потому что я не смог найти их. – lostromos
В чем смысл этого? Прочитайте файл и сохраните его в битовом поле, это значительно уменьшит использование памяти. – Marged