|
|
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
Привет. Требуется вернуть(показать не экране, либо передать как выходной параметр) содержимое текстового файла. Предположительно файл будет на уровне 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/ я новичок. если вопрос банальный просьба на х.. не слать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 14:36:04 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
Никогда, никогда, НИКОГДА не используйте для конкатенции строк в цикле шаблон типо Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 14:48:07 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
Советую почитать небольшую статью с http://skipy.dev.juga.ru/technics/strings.html про работу со строками (к сожалению, сейчас не работает, но можно зайти в гуглевский буфер . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 14:52:40 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
Спасибо большое. ща попробуем))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 14:56:58 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
КореецСпасибо большое. ща попробуем))) Попробуйте. И напишите, на сколько порядков ускорилась работа софтины. Я так думаю, раз в 1000 как минимум... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 15:04:49 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
Кореец ..после того как прочитаны первые 8000 строк на каждые следующие 1000 строк тратится около 20 секунд... PS/ я новичок. если вопрос банальный просьба на х.. не слать. А ты посмотри во что твой код транслируеца (javap -c class). В 1.4. на каждый + в цикле создается новый StringBuffer, у которого затем вызывается append() и toString(). Вместо StringBuffer'a в 1.5 есть StringBuilder - то же самое, только методы не синхронизированы. Работает быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 15:25:28 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
StringBuffer увеличил в несколько тысяч раз производительность операции. Если раньше только на 1000 строк уходило 20 сек, то сейчас ВЕСЬ файл читается за доли секунды. Со StrinBuilder аналогично. Мда...и правда, знать джава - означает знать их библиотеки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 15:41:52 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
КореецМда...и правда, знать джава - означает знать их библиотеки. +1 "Выучить синтаксис" - только самое начало :) И это справедливо далеко не только для явы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 15:59:58 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
http://javagu.ru/portal/dt?ArticleId=GURU_ARTICLE_64519 Прибить в FAQ PS Эта ошибка от жабы не зависит, а показывает лишь квалификацию "писателя", я сам когда был зеленый и невежественный, тоже формировал текстовый файл, суммирую строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 23:14:12 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
Ходили слухи (сам не проверял, по байткоду не смотрел), что компилятор при оптимизации сам переводит конкатенацию в чистом виде в конструкцию со StringBuffer (я так полагаю, конструкции должны быть простыми). Правда про версии ничего не помню... Хотя у самого так и не получилось получить такой оптимизации (по бенчмаркам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 08:26:43 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
^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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 08:36:52 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
Ну да, кривовато. А интересно, ведь не зря разработчики сделали именно так. Чем-то ведь они руководствовались... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 08:43:56 |
|
||
|
Как лучше прочитать большой файл
|
|||
|---|---|---|---|
|
#18+
^ozzy^Ходили слухи (сам не проверял, по байткоду не смотрел), что компилятор при оптимизации сам переводит конкатенацию в чистом виде в конструкцию со StringBuffer (я так полагаю, конструкции должны быть простыми). Правда про версии ничего не помню... Хотя у самого так и не получилось получить такой оптимизации (по бенчмаркам). Статью читаем ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2007, 00:03:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34371766&tid=2146442]: |
0ms |
get settings: |
14ms |
get forum list: |
28ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
48ms |
get topic data: |
17ms |
get forum data: |
5ms |
get page messages: |
91ms |
get tp. blocked users: |
3ms |
| others: | 330ms |
| total: | 546ms |

| 0 / 0 |
