powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужны библиотеки для быстрой работы с файлами
25 сообщений из 57, страница 1 из 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
25 сообщений из 57, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужны библиотеки для быстрой работы с файлами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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