Какие советы по обработке больших файлов в Java - PullRequest
0 голосов
/ 25 февраля 2009

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

Ответы [ 3 ]

3 голосов
/ 25 февраля 2009

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

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

2 голосов
/ 25 февраля 2009

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

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

1 голос
/ 25 февраля 2009

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

...