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

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

Ответов (3)

Решение

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

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

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

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

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