Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > RandomAccessFile сильно тормозит


Автор: Mirkes 27.5.2013, 10:57
День добрый.
У меня есть два типа файлов. Один - бинарный, в нем записаны double,
второй - текстовый, каждая строка содержит два целых числа и одно действительное.
Размеры файлов вполне сопоставимы - бинарные по совокупности 22 гига, текстовый - 3 гига.
При обработке текстовый фаил читается подряд, а бинарник только выборочно.
Если я пускаю обработку двух текстовых (BufferedReader), все срабатывает почти мгновенно.
Если я пускаю текстовый с бинарным - в разы (где-то в 10 раз) медленнее.
В чем может быть дело? Я так понимаю, что для RandomAccessFile буфферизация не предусмотрена?
Файл создается так
Код

                    raf = new RandomAccessFile(dir + chroms + "-GC.ftr", "r");

Можете посоветовать что-нибудь полезное по ускорению работы?

Автор: LSD 27.5.2013, 12:59
А как ты работаешь с RAF?

Автор: Mirkes 28.5.2013, 00:18
мне нужны куски заранее неизвестной длины, идущие подряд. Читаю их следующим образом:
Код

                if (pos * dblSize < raf.length()) {
                    if (pos > oldPos + 1)
                        raf.seek(pos * dblSize);
                    value = raf.readDouble();
                    oldPos = pos;
                }

Автор: LSD 28.5.2013, 09:26
Все равно непонятно, как у тебя меняется pos например. Что за магия pos > oldPos + 1 и т.д.

Попробуй перейти на MappedByteBuffer
Код

MappedByteBuffer mappedByteBuffer = raf.getChannel().map(FileChannel.MapMode.READ_ONLY, 0L, raf.length());

Автор: Mirkes 28.5.2013, 16:06
Спасибо. Посмотрю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)