Ruby - Считайте файл в пакетах

Я читаю файл, который составляет 10 МБ в размере и который содержит некоторый идентификатор. Я считал их в список в рубине. Я обеспокоен, что это могло бы вызвать проблемы памяти в будущем, когда количество идентификатора в файле могло бы увеличиться. Существует ли эффективный способ считать большой файл в пакетах?

Спасибо

8
задан Boolean 2 June 2010 в 22:41
поделиться

1 ответ

универсального пути не существует.

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 медленнее, чем первый метод

4
ответ дан 5 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: