Я читаю файл, который составляет 10 МБ в размере и который содержит некоторый идентификатор. Я считал их в список в рубине. Я обеспокоен, что это могло бы вызвать проблемы памяти в будущем, когда количество идентификатора в файле могло бы увеличиться. Существует ли эффективный способ считать большой файл в пакетах?
Спасибо
универсального пути не существует.
1) вы можете читать файл по частям:
File.open('filename','r') do |f|
chunk = f.read(2048)
...
end
недостаток: вы можете пропустить подстроку, если бы она была между фрагментами, т.е. вы ищете «SOME_TEXT», но «SOME_» - это последние 5 байтов 1-го 2048-байтового фрагмента, а "ТЕКСТ" - 4 байта 2-го фрагмента
2) вы можете читать файл построчно
File.open('filename','r') do |f|
line = f.gets
...
end
недостаток: в этом случае было бы 2x..5x медленнее, чем первый метод