Каковы некоторые советы по обработке больших файлов в Java

StackOverflow https://stackoverflow.com/questions/586409

  •  06-09-2019
  •  | 
  •  

Вопрос

Мне нужно выполнить простой grep и другие манипуляции с большими файлами на Java.Я не настолько знаком с утилитами Java NIO, но я предполагаю, что это то, что мне нужно использовать.Какие ресурсы или полезные советы у вас есть для чтения / записи больших файлов.Кроме того, я работаю над SWT-приложением, и мне нужно отобразить части этих данных в текстовой области графического интерфейса.

Это было полезно?

Решение

java.io.RandomAccessFile использует long для смещения указателя на файл, поэтому должен быть в состоянии справиться.Однако вы должны читать фрагмент за раз, иначе накладные расходы будут высокими. FileInputStream работает аналогично.

Java NIO не должен быть слишком сложным.Тебе не нужно возиться с Selectors или аналогичный.Фактически, до JDK7 вы не могли выбирать с помощью files.Однако избегайте сопоставления файлов.Там нет unmap, поэтому, если вы попытаетесь сделать это часто, у вас закончится адресное пространство в 32-разрядных системах или вы столкнетесь с другими проблемами (NIO пытается вызвать GC, но это немного халтурно).

Другие советы

Если все, что вы делаете, это считываете весь файл по частям за раз, без специальной обработки, то nio и java.io.RandomAccessFile вероятно, это перебор.Просто считывайте и обрабатывайте содержимое файла по блоку за раз.Убедитесь, что вы используете BufferedInputStream или BufferedReader.

Если вам нужно прочитать весь файл, чтобы сделать то, что вы делаете, и вы читаете только один файл за раз, то вы получите мало пользы от nio.

Может быть, немного не по теме:Взгляните на ВФС автор: apache.Изначально это должна была быть библиотека для скрытия ftp-http-файловой-какой угодно системы за фасадом файловой системы с точки зрения вашего приложения.Я упоминаю об этом здесь, потому что у меня есть положительный опыт доступа к большим файлам (через ftp) для поиска, чтения, копирования и т.д.(большой в этом контексте означает > 15 МБ) с помощью этой библиотеки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top