Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как лучше прочитать большой файл / 14 сообщений из 14, страница 1 из 1
05.03.2007, 14:36:04
    #34371516
Кореец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
Привет.
Требуется вернуть(показать не экране, либо передать как выходной параметр) содержимое текстового файла. Предположительно файл будет на уровне 2-5 Мб.
Посоветуйте плз, как лучше это сделать.
Такой вариант кода неплохо работает с небольшимим по величине файлами 5Кб
try {
String s,res=null;
BufferedReader out = new BufferedReader(new FileReader(path) );
int i=0;
while( (s=out.readLine())!=null) {
res+=s+'\n';
}

out.close();
}catch (Exception e){
System.out.println(e);
}
но с 5Мб...Res приходится ждать до жути долго..
..после того как прочитаны первые 8000 строк на каждые следующие 1000 строк тратится около 20 секунд...
PS/ я новичок. если вопрос банальный просьба на х.. не слать.
...
Рейтинг: 0 / 0
05.03.2007, 14:48:07
    #34371560
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
Никогда, никогда, НИКОГДА не используйте для конкатенции строк в цикле шаблон типо
Код: plaintext
1.
2.
3.
4.
5.
String s = "";
 for  (...) {
    s += bla-bla-bla;
}
 return  s;
Это очень сильно тормозит работу. Для конкатенции есть StringBuffer.
Код: plaintext
1.
2.
3.
4.
5.
StringBuffer sb =  new  StringBuffer();
 for  (...) {
    sb.append(bla-bla-bla);
}
 return  sb.toString();
...
Рейтинг: 0 / 0
05.03.2007, 14:52:40
    #34371578
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
Советую почитать небольшую статью с http://skipy.dev.juga.ru/technics/strings.html про работу со строками (к сожалению, сейчас не работает, но можно зайти в гуглевский буфер .
...
Рейтинг: 0 / 0
05.03.2007, 14:56:58
    #34371595
Кореец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
Спасибо большое. ща попробуем)))
...
Рейтинг: 0 / 0
05.03.2007, 15:04:49
    #34371627
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
КореецСпасибо большое. ща попробуем)))
Попробуйте. И напишите, на сколько порядков ускорилась работа софтины. Я так думаю, раз в 1000 как минимум...
...
Рейтинг: 0 / 0
05.03.2007, 15:25:28
    #34371704
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
Кореец
..после того как прочитаны первые 8000 строк на каждые следующие 1000 строк тратится около 20 секунд...
PS/ я новичок. если вопрос банальный просьба на х.. не слать.
А ты посмотри во что твой код транслируеца (javap -c class).
В 1.4. на каждый + в цикле создается новый StringBuffer, у которого затем вызывается append() и toString().
Вместо StringBuffer'a в 1.5 есть StringBuilder - то же самое, только методы не синхронизированы. Работает быстрее.
...
Рейтинг: 0 / 0
05.03.2007, 15:41:52
    #34371766
Кореец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
StringBuffer увеличил в несколько тысяч раз производительность операции. Если раньше только на 1000 строк уходило 20 сек, то сейчас ВЕСЬ файл читается за доли секунды.
Со StrinBuilder аналогично.
Мда...и правда, знать джава - означает знать их библиотеки.
...
Рейтинг: 0 / 0
05.03.2007, 15:59:58
    #34371817
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
КореецМда...и правда, знать джава - означает знать их библиотеки.
+1
"Выучить синтаксис" - только самое начало :) И это справедливо далеко не только для явы.
...
Рейтинг: 0 / 0
06.03.2007, 23:14:12
    #34376041
Как лучше прочитать большой файл
http://javagu.ru/portal/dt?ArticleId=GURU_ARTICLE_64519

Прибить в FAQ

PS Эта ошибка от жабы не зависит, а показывает лишь квалификацию "писателя", я сам когда был зеленый и невежественный, тоже формировал текстовый файл, суммирую строки.
...
Рейтинг: 0 / 0
07.03.2007, 08:26:43
    #34376330
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
Ходили слухи (сам не проверял, по байткоду не смотрел), что компилятор при оптимизации сам переводит конкатенацию в чистом виде в конструкцию со StringBuffer (я так полагаю, конструкции должны быть простыми). Правда про версии ничего не помню...
Хотя у самого так и не получилось получить такой оптимизации (по бенчмаркам).
...
Рейтинг: 0 / 0
07.03.2007, 08:36:52
    #34376354
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
^ozzy^ пишет:

> Ходили слухи (сам не проверял, по байткоду не смотрел), что компилятор
> при оптимизации сам переводит конкатенацию в чистом виде в конструкцию
> со StringBuffer

Да, я отладчиком в этом убедился (JRE5 и 6). Только он это кривовато
делает. Например:

s = s1 + s2 + s3;

выполнится примерно так:

s = new StringBuffer( new StringBuffer( s1 )
.append( s2 ).toString()).append( s3 ).toString();

Что не есть гуд...

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.03.2007, 08:43:56
    #34376368
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
Ну да, кривовато.
А интересно, ведь не зря разработчики сделали именно так. Чем-то ведь они руководствовались...
...
Рейтинг: 0 / 0
08.03.2007, 00:03:18
    #34378709
Как лучше прочитать большой файл
^ozzy^Ходили слухи (сам не проверял, по байткоду не смотрел), что компилятор при оптимизации сам переводит конкатенацию в чистом виде в конструкцию со StringBuffer (я так полагаю, конструкции должны быть простыми). Правда про версии ничего не помню...
Хотя у самого так и не получилось получить такой оптимизации (по бенчмаркам). Статью читаем ?
...
Рейтинг: 0 / 0
09.03.2007, 07:06:47
    #34379519
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше прочитать большой файл
Сие уже известно :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как лучше прочитать большой файл / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]