Я пытаюсь прочитать файл 2GB, используя следующую программу. Дело в том, что я хочу прочитать файл, а затем добавить его в одну строку, которая переходит к программе для дальнейшей обработки. это приложение будет развернуто в Jenkins, где я не могу увеличить размер памяти. Удивительно, если я могу обработать файл на небольшие pieaces, а затем обработать егоЧтение BIG-файла в Java
Когда я добавляю строку в построитель строк, я получил исключение памятиOutOFBound.
StringBuilder build = new StringBuilder();
try {
FileInputStream fstream = new FileInputStream("E:"+File.separator+"file"+File.separator+"File.text");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
build.append(strLine);
}
//Close the input stream
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Любая идея, как разобрать большой файл в строку? или я должен прочитать файл на более мелкие куски, а затем обработать его?
Делитесь информацией о своей среде выполнения в своем сообщении. Для файла 2gb вы хотите> 3gb, назначенного вашему vm.Строка должна войти в память, если вы настаиваете на использовании строки. – Jan
Попробуйте увеличить размер кучи для вашего приложения –
Вы можете обнаружить, что вы * не можете * сделать это, даже с большим размером кучи - если 2GB-файл - это все ASCII, вы получите 4 ГБ строку в памяти. .. который может подтолкнуть некоторые ограничения VM, даже если у вас достаточно памяти. Не могли бы вы обработать «Список» с каждой строкой в виде отдельной строки? –