Как прочитать блок из n строк очень большого текстового файла в обоих направлениях, используя Java - PullRequest
2 голосов
/ 05 марта 2010

Мне нужно прочитать очень большой файл журнала (около 400 МБ) и отобразить его содержимое в текстовой области.

Очевидно, что сначала я не могу прочитать весь файл из-за его размера, поэтому я ищу метод, который может прочитать первые n строк (или часть байтов), а затем, когда их спросят, начать читать следующие n линии и так далее. Метод должен работать в обоих направлениях: то есть, если отображаются строки от 1000 до 1500, а пользователь хочет прочитать обратно, я должен отображать строки от 500 до 1000.

Я пытаюсь использовать RandomAccessFile, LineIterator и классический BufferedReader подход, но эти решения не кажутся хорошими.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 05 марта 2010

Если ваш файл не имеет строгой структуры (то есть фиксированное количество символов в строке или в каком-то логическом блоке, как заметил Мартин), то вы не можете использовать преимущества RandomAccessFile.

В этом случае вы можете попытаться разбить ваш огромный файл на более мелкие файлы с фиксированным количеством строк в каждом (например, 1000). В этом случае, когда пользователь хочет видеть строки с 1800 до 2100, вам нужно прочитать только 2 файла (из нескольких тысяч, вероятно, если вы скажете, что общий размер составляет около 400 Мб).

Если вы не можете сделать это, единственное, что вы можете сделать, - это использовать NIO, чтобы хотя бы немного повысить производительность.

1 голос
/ 05 марта 2010

В подобных случаях другие предлагали сохранить файл в базе данных. Например, каждая строка в виде отдельной записи. Тогда намного проще читать данные в любом направлении и большими или маленькими порциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...