powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужны библиотеки для быстрой работы с файлами
57 сообщений из 57, показаны все 3 страниц
Нужны библиотеки для быстрой работы с файлами
    #38971970
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может кто-нибудь подсказать библиотеки для БЫСТРОЙ работы с файлами (чтение-запись) в Java. Встроенные средства IO очень медленные и неудобные. Сравнивал скорость работы классов IO в Java и VB .Net. Конечным результатом должен быть массив или коллекция строк. Оказалось, что скорость работы кода получения строк в Java минимум в 2 раза медленнее.

Такой результат давали все испробованные мной способы - метод readLine() в цикле, readAllLines(), преобразование в строку из байтового и символьного массивов и последующее разделение на строки. Что-то работало совсем медленно, что несколько быстрее.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972011
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daged,

java nio
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972025
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ее я тоже проверял. Например, метод readAllLines() из нее.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972026
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174daged,

java nio
nio не обязательно быстрее.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972027
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dagedМожет кто-нибудь подсказать библиотеки для БЫСТРОЙ работы с файлами (чтение-запись) в Java. Встроенные средства IO очень медленные и неудобные. Сравнивал скорость работы классов IO в Java и VB .Net. Конечным результатом должен быть массив или коллекция строк. Оказалось, что скорость работы кода получения строк в Java минимум в 2 раза медленнее.

Такой результат давали все испробованные мной способы - метод readLine() в цикле, readAllLines(), преобразование в строку из байтового и символьного массивов и последующее разделение на строки. Что-то работало совсем медленно, что несколько быстрее.

Откуда уверенность что проблема именно в IO API, а не в том что в вашем тесте Java долго интерпретируется, или то что строки могут формироваться намного медленнее?
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972038
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помнится на javatalks кто-то поднимал такую же тему, наверное тс
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972039
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daged,

А пробовали буфер при чтении увеличить? Иногда меняет производительность довольно существенно.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972053
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>кто-то поднимал такую же тему

Нет, я столкнулся с этой проблемой несколько дней назад
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972058
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dagedОказалось, что скорость работы кода получения строк в Java минимум в 2 раза медленнееЕсли при вводе-выводе тормозит не ввод-вывод, то, скорее всего, вы что-то делаете неправильно.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972061
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>то что строки могут формироваться намного медленнее?

Как раз основная проблема, что строки формируются медленнее. Основное время при тесте когда сначала получается массив байт, а затем из него формируется строка, уходит на это.

>А пробовали буфер при чтении увеличить?

Не подскажете, как в NIO установить размер буфера для readAllLines()? А в классах IO скорость считывания достаточна, основной расход времени там идет на формирование строк из массива байт.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972067
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daged, ты не тем занимаешся. Во первых большая часть IO давно уже переписана
с использованием NIO. Во вторых оптимизировать на системном уровне там особо нечего.
Волшебной опции fast=true нету.

Покажи лучше форуму свой код. Что за алгоритм. Что за задача.

И тебе ткнут как ее оптимизировать или вообще сменить постановку.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972117
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОсновное время при тесте когда сначала получается массив байт, а затем из него формируется строка, уходит на это.
дак это не относится к работе с файлами.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972121
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если альтернативных библиотек не существует, просьба об этом тоже написать.

>Волшебной опции fast=true нету

Про коллекции в Java мне тоже говорили примерно тоже самое. В итоге нашел библиотеки коллекций, которые работают в большинстве случаев 5-10 и более раз быстрее, чем стандартные (в зависимости от задачи). Это если мне нужно работать с элементарными типами (всегда только это и нужно), а не оболочками над ними.

Показывать особо нечего, это все стандартный кода. Я уже написал, что задача получать массив или коллекцию строк из файла.

Каждый тест выполнялся по 100 раз на 1 мб файле, книге.

1 вариант (около 4.5 секунд):
Код: java
1.
2.
List Stroki = new ArrayList();
Stroki = java.nio.file.Files.readAllLines(Paths.get("/Fayl"), Charset.defaultCharset());



2 вариант (около 4 секунд):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
String Stroki[] = new String[100000];
int n = 0;
FileReader Rider = new FileReader("/Fayl");
Строка[n] = infile.readLine();
while (Строка[n] != null)
{
	n++;
	Строка[n] = infile.readLine();
}



3 вариант с получением байтов в буфер и затем преобразованием в строку + ее разделение на линии даже писать не буду, т.к. он выполнялся совсем уж долго.

Для сравнения, код на VB .Net выполнялся примерно 1950 мс:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim Stroki(30000) As String
Dim n As Integer = 0
Using FileReader As New System.IO.StreamReader("/Fayl", System.Text.Encoding.Default)
	While FileReader.Peek() >= 0
		Stroki(n) = FileReader.ReadLine
		n += 1
	End While
End Using
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972126
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
String s[] = new String[100000];
int n = 0;
Reader reader = new BufferedReader(new FileReader("/Fayl"));
while ((s[n++] = reader.readLine()) != null) {
}


Размер буфера по-умолчанию 8Кб, по-моему. Можешь попробовать 16 и 32. Он задаётся вторым параметром конструктора BufferedReader.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972130
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Можешь попробовать 16 и 32.

Попробовал, результат отличается незначительно - на 100-200 мс.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972132
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дак какая из операций долгая - само чтение или заполнение строк?
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972141
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>дак какая из операций долгая - само чтение или заполнение строк?

Какая разница что выполняется дольше, если мне нужно получить определенный стандартный результат - строки из файла, а не просто чтобы головка для галочки прошлась по диску ЖД.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972143
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daged>дак какая из операций долгая - само чтение или заполнение строк?

Какая разница что выполняется дольше, если мне нужно получить определенный стандартный результат - строки из файла, а не просто чтобы головка для галочки прошлась по диску ЖД.
дак если чтение- оптимизировать чтние, а если преобразование строк - то причем здесь операции чтения?
mayton Покажи лучше форуму свой код. Что за алгоритм. Что за задача.

И тебе ткнут как ее оптимизировать или вообще сменить постановку.
+1
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972146
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>причем здесь операции чтения?

При том, что по-хорошему и чтение, и создание строк должны были бы быть реализованы на низком уровне и их никак не надо было бы оптимизировать, да и не возможно бы это было.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972147
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daged,

если я правильно понял то ты читаешь файл размером в 1Мb на масиив строк и это занимает не мене 4 сек
что-то не то делаешь, что такие большие тайминги

я как то на nio обрабатывал файл размером 100Мb и делил его на массив слов, который получался около 1.5 ляма эл-в и это занимало меньше секунды
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972149
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>большие тайминги

Я написал, что тесты выполнялись по 100 раз.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972153
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daged,

я так понял, что один и тот же тест по 100 раз прогонялся для точности )
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972156
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, я неправильно выразился. Правильней было бы каждый тест состоял из 100 повторений указанного кода.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972162
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daged,

прикалываешся?
у меня первый тест занимает менее пол секунды
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972164
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>прикалываешся

Нет.

У тебя же другой файл, там другое количество строк. В моем файле около 25000 строк.

Сколько у тебя занимается второй тест?
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972165
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daged,

ну, подгонять файл под такое кол-во строк не интересно, лучше выложи file
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972167
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не выложу. В том, что эта проблема из-за скорости Java я уверен, проверять не надо. Надо подсказать библиотеки, либо сказать об их отсутствии.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972168
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну тогда успехов
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972173
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dagedНе выложу. В том, что эта проблема из-за скорости Java я уверен, проверять не надо. Надо подсказать библиотеки, либо сказать об их отсутствии.
Насколько чисты были условия эксперимента?

К примеру если ты на Windows-машине запускал тесты javа которые "прогревали"
кеш файловой системы то последующий запуск vbs.net уже находился в заведомо
других условиях и .net приложение использовало более быстрый IO.

Условия компилляций. К примеру jvm бывает клиентская (hotspot) и серверная.
И в варианте -client код может некоторое время работать в режиме интерпретатора
байткода. Это может влиять на декодирование кодовой страницы. Вобщем
тут надо курить опции -XX кажется.

Особые условия .net кода. Используя возможности более тесной интеграции
с ОС Windows какие-то части задачи (например та-же трансформация кодировок)
могут быть расчитаны в контексте ОС-Windows и существенно выигрывать.

Вобщем задача - эту надо решать комплексно а не в виде получения эррея
строчек. Ведь этот эррей нужно и аллоцировать и удалять из памяти. И эти
операции тоже имеют ненулевые накладные.

Ну вобщем полна коробочка.

И по чесноку ... надо еще прогнать этот-же тест на Linux-машине
с .net-ом. Чтобы рассмотреть все кейсы тык-скыть а не только на винде.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972181
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

может на пне третьем еще считает или дефрагментацию делал сто назад, а судя его код он не использует java 7
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972192
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>в заведомо других условиях

Тесты запускались множество раз, в разном порядке за несколько дней - результат один.

Попробую позапускать с разными опциями, если найду как их указывать в eclipse, но думаю результат не очень сильно изменится.

>более тесной интеграции

Что мешало сделать такую же тесную интеграцию разработчикам Java?

На линуксе придется использовать Mono вместо .Net Framework. А платформа Mono на некоторых задачах очень сильно тормозила когда я ее тестировал. Это даже было одной из причин почему я перешел с VB .Net.

Процессор мощный, тесты выполнял на Java 8.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972194
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот это мне делать нечего...
первый тест с файлом 1024Кб (25 тыс строк) занимает от 1109 до 1125 мс
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972203
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>от 1109 до 1125 мс

Уже ближе... Еще немного и будет как у меня :) Если конфигурация строку станет похожей...
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972205
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
врядли конфигурация строки может давать такую разницу
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972206
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно. Может быть еще влияет количество ядер процессора, тип ЖД.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972208
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
процессор у меня я бы не сказал, что мощный
с мощный было бы быстрее...
так что заблуждаешся ты в своих тестах
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972292
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dagedВ том, что эта проблема из-за скорости Java я уверен, проверять не надо. Надо подсказать библиотеки, либо сказать об их отсутствии.

Примерещилось. Возможная причина мерещения - кривые руки, написавшие быдлокод. С библиотеками порядок. Вопрос отвечен.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972301
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ТС.

Не помогут тебе библиотеки. Ты задачу свою изложи и почему тебя парит разница между 2 и 4 секундами.

Навскидку, разница между джавой и VB в том, что джаве после старта надо "прогреться" - она компилирует свой байткод выборочно, т.е. не сразу и только тот, который активно используется. Так что правильный способ сделать замеры - прогнать твой тест 101 раз в одном запуске - 100 раз вхолостую, а 101й с замером. И так же для VB.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972355
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>так что заблуждаешся ты в своих тестах

Мне так не кажется.

>процессор у меня я бы не сказал, что мощный

У меня 2 ядра.

>кривые руки, написавшие быдлокод

Надеюсь, на этом форуме не приветствуется троллинг? Чел пустопорожне указывает на криворукость, вместо того, чтобы указать в чем именно заключалась криворукость или помалкивать. Надеюсь, модераторы обратят на это внимание.

Видимо альтернативных библиотек нет, судя по тому, что о них никто даже не упоминает. Ну и ладно. Получилось наконец указать в Eclipse опцию -server и код действительно стал выполняться быстрее! Второй тест выполняется даже быстрее чем в VB .Net - около 1.7 секунд. Для этого указал в свойствах проекта JRE из JDK. А до этого среда ругалась на отсутствие папки server в JRE. Только теперь нужно будет использовать серверную JRE. Спасибо, mayton!

Вопрос закрыт.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972369
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dagedПолучилось наконец указать в Eclipse опцию -server и код действительно стал выполняться быстрее!
Собственно об интерпретации и был мой первый вопрос 17707652
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972419
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daged>так что заблуждаешся ты в своих тестах
Мне так не кажется.

цифры полученные мной должны же о чем-то говорить

daged>процессор у меня я бы не сказал, что мощный
У меня 2 ядра.

у меня 3-х ядренный 3300Mhz
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972433
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>об интерпретации и был мой первый вопрос

Надо было поподробнее объяснить что это означает, что нужно поменять. Мне те слова ни о чем не говорили. Я недавно начала изучать Java и не знаю всех тонкостей ее работы.

>должны же о чем-то говорить

Я уже пояснил о чем они говорят. Разница в файлах, количестве ядер, жд, может еще что-то. Там немного, тут чуть-чуть и в итоге набирается такая разница.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972455
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daged>об интерпретации и был мой первый вопрос
Надо было поподробнее объяснить что это означает, что нужно поменять. Мне те слова ни о чем не говорили. Я недавно начала изучать Java и не знаю всех тонкостей ее работы.

Google -> Java microbenchmarks
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972525
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Я что-то не пойму в чем прикол...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @author lesinsa on 30.05.2015.
 */
public class Main {

    public static final String TEST_FILE = "test.txt";
    public static final int NLINES = 250000;

    public static void main(String[] args) throws IOException {

        long tw = System.currentTimeMillis();
        try (FileOutputStream outputStream = new FileOutputStream(TEST_FILE)) {
            for (int i = 0; i < NLINES; i++) {
                Writer writer = new BufferedWriter(new OutputStreamWriter(outputStream), 4 * 1024);
                writer.write(UUID.randomUUID().toString());
                writer.write(" ");
                writer.write(UUID.randomUUID().toString());
                writer.write(" ");
                writer.write(UUID.randomUUID().toString());
                writer.write(" ");
                writer.write(UUID.randomUUID().toString());
                writer.write(" ");
                writer.write(UUID.randomUUID().toString());
                writer.write("\n");
                writer.flush();
            }
        }
        tw = System.currentTimeMillis() - tw;
        System.out.println(String.format("Written %d line by %d ms", NLINES, tw));

        for (int i = 0; i < 25; i++) {
            long t = System.currentTimeMillis();
            ArrayList<String> strings = new ArrayList<>();
            try (FileInputStream inputStream = new FileInputStream(TEST_FILE)) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream), 32 * 1024);
                String s = reader.readLine();
                while (s != null) {
                    strings.add(s);
                    s = reader.readLine();
                }
            }
            t = System.currentTimeMillis() - t;
            System.out.println(String.format("Read %d line by %d ms", strings.size(), t));
        }


        System.out.println();
        System.out.println("Reading using Java NIO");


        for (int i = 0; i < 25; i++) {
            long t = System.currentTimeMillis();
            List<String> stroki = Files.readAllLines(Paths.get(TEST_FILE), Charset.defaultCharset());
            t = System.currentTimeMillis() - t;
            System.out.println(String.format("Read %d line by %d ms", stroki.size(), t));
        }
    }
}

C:\soft\jdk1.8.0_40\bin\java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59373,suspend=y,server=n -Dfile.encoding=windows-1251 ............
Connected to the target VM, address: '127.0.0.1:59373', transport: 'socket'
Written 250000 line by 5208 ms
Read 250000 line by 216 ms
Read 250000 line by 178 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 178 ms
Read 250000 line by 172 ms
Read 250000 line by 174 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 174 ms
Read 250000 line by 175 ms
Read 250000 line by 174 ms
Read 250000 line by 234 ms
Read 250000 line by 174 ms
Read 250000 line by 176 ms
Read 250000 line by 174 ms
Read 250000 line by 175 ms
Read 250000 line by 174 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 174 ms
Read 250000 line by 174 ms
Read 250000 line by 174 ms

Reading using Java NIO
Read 250000 line by 205 ms
Read 250000 line by 169 ms
Read 250000 line by 171 ms
Read 250000 line by 167 ms
Read 250000 line by 168 ms
Read 250000 line by 168 ms
Read 250000 line by 168 ms
Read 250000 line by 166 ms
Read 250000 line by 169 ms
Read 250000 line by 165 ms
Read 250000 line by 167 ms
Read 250000 line by 167 ms
Read 250000 line by 193 ms
Read 250000 line by 167 ms
Read 250000 line by 166 ms
Read 250000 line by 165 ms
Read 250000 line by 166 ms
Read 250000 line by 167 ms
Read 250000 line by 167 ms
Read 250000 line by 166 ms
Read 250000 line by 167 ms
Read 250000 line by 166 ms
Read 250000 line by 167 ms
Read 250000 line by 168 ms
Disconnected from the target VM, address: '127.0.0.1:59373', transport: 'socket'
Read 250000 line by 179 ms

Process finished with exit code 0
И строк взял 250000, и файл получается в 44 МБ, а время чтения не превышает 200 мс.

С NLINES = 2500000, файл 441 МБ:
C:\soft\jdk1.8.0_40\bin\java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:60868,suspend=y,server=n -Xmx2048m -Dfile.encoding=windows-1251 ........
Connected to the target VM, address: '127.0.0.1:60868', transport: 'socket'
Written 2500000 line by 45044 ms
Read 2500000 line by 4075 ms
Read 2500000 line by 2954 ms
Read 2500000 line by 3745 ms
Read 2500000 line by 3549 ms
Read 2500000 line by 2689 ms
Read 2500000 line by 3367 ms
Read 2500000 line by 2818 ms
Read 2500000 line by 2802 ms
Read 2500000 line by 2358 ms
Read 2500000 line by 2752 ms
Read 2500000 line by 2700 ms
Read 2500000 line by 2754 ms
Read 2500000 line by 2598 ms
Read 2500000 line by 2866 ms
Read 2500000 line by 2626 ms
Read 2500000 line by 2764 ms
Read 2500000 line by 2672 ms
Read 2500000 line by 2831 ms
Read 2500000 line by 2623 ms
Read 2500000 line by 2907 ms
Read 2500000 line by 2638 ms
Read 2500000 line by 2886 ms
Read 2500000 line by 2700 ms
Read 2500000 line by 2959 ms
Read 2500000 line by 2677 ms

Reading using Java NIO
Read 2500000 line by 2755 ms
Read 2500000 line by 2518 ms
Read 2500000 line by 2936 ms
Read 2500000 line by 2739 ms
Read 2500000 line by 2676 ms
Read 2500000 line by 3085 ms
Read 2500000 line by 2743 ms
Read 2500000 line by 3158 ms
Read 2500000 line by 2764 ms
Read 2500000 line by 3006 ms
Read 2500000 line by 2778 ms
Read 2500000 line by 2663 ms
Read 2500000 line by 3081 ms
Read 2500000 line by 2634 ms
Read 2500000 line by 3001 ms
Read 2500000 line by 2887 ms
Read 2500000 line by 2994 ms
Read 2500000 line by 2736 ms
Read 2500000 line by 3057 ms
Read 2500000 line by 2899 ms
Read 2500000 line by 2650 ms
Read 2500000 line by 3076 ms
Read 2500000 line by 2626 ms
Read 2500000 line by 2974 ms
Disconnected from the target VM, address: '127.0.0.1:60868', transport: 'socket'
Read 2500000 line by 2816 ms

Process finished with exit code 0
Что я делаю не так?..
ЗЫ. Астрологи провозгласили неделю бенчмарков...
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972529
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему у меня получается 13 миллисекунд (?

что я делаю не так?
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972534
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA. Несколько мыслей.

Оба варианта неявно используют java.nio.charset.CharsetDecoder.

Думаю что профилирование должно показать что декодирование блока байт
в блок символом потребляет основное время CPU.

Кстати я-бы предложил поработать с файл-исходником в формате UTF-16.

Есть еще оригинальный вариант. Отказ от работы со строками и переход
на работу с байтами (byte[]). Для win-1251 это почти полная аналогия. С++ часто
пользуется аналогией byte==char и за счёт этого на микро-бенчарках
почти всегда выигрывает. Платформеры в отличие от плюсов обязаны
конвертить всё и вся в unicode для внутреннего представления и проигрывают
на low-level задачах подобных этой.

Работа с byte[] позволит уйти от кодировок и вопрос "хранения" строк
трансформируется в вопрос "отображения". Тоесть мы переносим
проблему декодирования "на потом".
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972597
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
mayton,

Интуиция и опыт подсказывает, что все это несущественно. Ну не может быть так долго на таких копеечных размерах файлов. Помнится, когда лениво было разбираться со Stax, просто загонял в память XML-файлы в десятки мегабайт и выполнял XSLT-преобразование. Время выходило почти как описанные 4-5 сек.

Новый вариант бенчмарка, делает переконвертацию файла из UTF-16 в UTF-8. Вполне себе реальная задачка.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;

public class Main {

    public static final String TEST_FILE = "war_and world.txt";
    private static final String TEST_OUTPUT_FILE = "war_and_world.utf8.txt";
    public static final String INPUT_ENCODING = "utf-16";
    public static final String OUTPUT_ENCODING = "utf-8";

    public static void main(String[] args) throws IOException {
        for (int i = 0; i < 10; i++) {
            long t = System.currentTimeMillis();
            ArrayList<String> strings = new ArrayList<>();
            try (FileInputStream inputStream = new FileInputStream(TEST_FILE)) {
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(inputStream, Charset.forName(INPUT_ENCODING)));
                String s = reader.readLine();
                while (s != null) {
                    strings.add(s);
                    s = reader.readLine();
                }
            }
            t = System.currentTimeMillis() - t;
            System.out.println(String.format("Read %d line by %d ms", strings.size(), t));

            long tw = System.currentTimeMillis();
            try (FileOutputStream outputStream = new FileOutputStream(TEST_OUTPUT_FILE)) {
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, OUTPUT_ENCODING));
                for (String string : strings) {
                    writer.write(string);
                    writer.write("\n");
                }
            }
            tw = System.currentTimeMillis() - tw;
            System.out.println(String.format("Written %d line by %d ms", strings.size(), tw));
            System.out.println();
        }
    }
}

В качестве данных загнал все тома "Войны и мира" отсюда . Получилось 50000 строк и >6МБ текста в кодировке UTF-16.

Вот результаты:
Read 50070 line by 81 ms
Written 50070 line by 74 ms

Read 50070 line by 65 ms
Written 50070 line by 42 ms

Read 50070 line by 40 ms
Written 50070 line by 38 ms

Read 50070 line by 39 ms
Written 50070 line by 38 ms

Read 50070 line by 44 ms
Written 50070 line by 39 ms

Read 50070 line by 41 ms
Written 50070 line by 41 ms

Read 50070 line by 54 ms
Written 50070 line by 38 ms

Read 50070 line by 39 ms
Written 50070 line by 40 ms

Read 50070 line by 38 ms
Written 50070 line by 41 ms

Read 50070 line by 42 ms
Written 50070 line by 41 ms

Process finished with exit code 0


dagedНе выложу. В том, что эта проблема из-за скорости Java я уверен, проверять не надо .Ну уж нет, мы проверим! Сдается мне, что хлопчик троллит.dagedНадо подсказать библиотеки, либо сказать об их отсутствии.Не, надо забанить школьника, чтобы не пистел.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972600
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGAСдается мне, что хлопчик троллит.
А бы ли мальчик?

dagedЯ недавно начала изучать Java и не знаю всех тонкостей ее работы.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972602
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо он делает много операций со строками, вот и получает тормоза.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972605
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGA,

зачем выдумываешь свой тест?
делай тогда уже как все, в цикле должно быть 100, а файл 25000 строк, 1Мб
сделай хотя бы NIO
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972622
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daged,

Я не поленился, скачал книгу в txt, подогнал ее под 100000 строк.
Размер файла получился 23mb и выполнил под java:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        String s[] = new String[100000];
        int n = 0;

        Date start = new Date();
        Date end = new Date();
        List Stroki = new ArrayList();
        try {
            Stroki = java.nio.file.Files.readAllLines(Paths.get("d:/book/b1.txt"),                  
                                 StandardCharsets.UTF_8);
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        end = new Date();
        System.out.println(end.getTime() - start.getTime());



Результат от 60 до 120 msec

Затем C#:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
            string[] Stroki = new string[100000];
            int i = 0;
            int n = 0;
            DateTime start = DateTime.Now;
            DateTime end = DateTime.Now; 
            try
            {
                using (StreamReader sr = new StreamReader("d:/book/b1.txt"))
                {
                    
                    while ( true )
                    {
                        string line = sr.ReadLine();
                        if (line == null && i >= 100000)
                        {
                            break;
                        }
                        Stroki[i++] = line;
                        n = i;
                        //                    Console.WriteLine(line);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(ex.Message);
            }
            end = DateTime.Now;

            MessageBox.Show("Всего: " + n + "; Время: " + (end - start));



Результат от 170 до 200 msec.

Кстати, вы говорили о 100000 строк, а в вашем тексте 30000 строк для VB.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972623
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rema174WGA,

зачем выдумываешь свой тест?
делай тогда уже как все, в цикле должно быть 100, а файл 25000 строк, 1Мб
сделай хотя бы NIOБерешь, переделываешь, выставляешь здесь результаты...
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972624
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daged,

Если вы использовали код, который показали выше, то ничего удивительно. В java вы читаете 100000 строк, а в VB 30000.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972628
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery Shiskin,

Добавлю, что в .net есть объект File, который действительно работает быстро. На c# это выглядит так:

Код: c#
1.
2.
3.
4.
5.
6.
          DateTime start = DateTime.Now;
            DateTime end = DateTime.Now; 

            string[] s = File.ReadAllLines("d:/book/b1.txt");

            MessageBox.Show("Всего строк: " + s.Length + "; start="  + start.Millisecond + "; end=" + end.Millisecond);
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972631
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

А мне кажется, что ерунда все это. Взгляните на код VB выше, который привел daged.
Для java он задал 10000 строк, а для VB 30000.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972638
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGArema174WGA,

зачем выдумываешь свой тест?
делай тогда уже как все, в цикле должно быть 100, а файл 25000 строк, 1Мб
сделай хотя бы NIOБерешь, переделываешь, выставляешь здесь результаты...
ты невнимательно читаешь, я уже выставлял тут свои результаты, причем так, как это делал тс на джаве
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972684
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rema174ты невнимательно читаешь, я уже выставлял тут свои результаты, причем так, как это делал тс на джавеТопик не представляет интереса, чтобы читать его внимательно. Я уже говорил о своем отношении к бесполезным синтетическим бенчмаркам. Баловство все это...
...
Рейтинг: 0 / 0
57 сообщений из 57, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужны библиотеки для быстрой работы с файлами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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