powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Копирование файлов
8 сообщений из 8, страница 1 из 1
Копирование файлов
    #39989212
dbxp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите...

В java - скрипте реализовано копирование файлов на сетевой ресурс


...
is = new FileInputStream(source);
os = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}


Копирование длится в 3 раза дольше по сравнению с копированием в проводнике (FAR)
файлы ~ 50гб

C параметром buffer игрался - существенных результатов нет

Чем объяснить?

ПС: Не силен в предмете ...если не корректно задал прошу сильно не бить)
...
Рейтинг: 0 / 0
Копирование файлов
    #39989214
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbxp
Чем объяснить?

Что ты хотел от жабки? Чтобы она быстро работала?
...
Рейтинг: 0 / 0
Копирование файлов
    #39989218
dbxp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster, хотя бы так же

..то есть это очевидно?
...
Рейтинг: 0 / 0
Копирование файлов
    #39989224
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbxp
crutchmaster, хотя бы так же

Почему "хотя бы"? Типа в идеале должно быть быстрее?


dbxp
..то есть это очевидно?

Ну конечно, это же ява. Там есть какой-то оверхед на всё. Это только в синтетических тестах она обгоняет си в 20 раз.
...
Рейтинг: 0 / 0
Копирование файлов
    #39989246
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbxp,

java.nio.file.Files#copy тоже медленно?
...
Рейтинг: 0 / 0
Копирование файлов
    #39989256
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbxp
Копирование длится в 3 раза дольше ... C параметром buffer игрался - существенных результатов нет

- используйте BufferedInputStream и BufferedOutputStream, но как уже отметили выше, возможно имеет смысл использовать другие способы копирования
...
Рейтинг: 0 / 0
Копирование файлов
    #39989289
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
dbxp,

java.nio.file.Files#copy тоже медленно?


+1

Я чет как то дебажил Files.newInputStream(), и там еще и "правильный" буфер (но это частный случай возможно зависит от ОС и файловой системы) внутри в jvm был буффер его размер совпадал и не случайно с размером страницы файловой системы.
...
Рейтинг: 0 / 0
Копирование файлов
    #39989458
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbxp
Подскажите...

В java - скрипте реализовано копирование файлов на сетевой ресурс


...
is = new FileInputStream(source);
os = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}


Копирование длится в 3 раза дольше по сравнению с копированием в проводнике (FAR)
файлы ~ 50гб

C параметром buffer игрался - существенных результатов нет

Чем объяснить?

ПС: Не силен в предмете ...если не корректно задал прошу сильно не бить)

Оптимизация копирования файлов - это отдельный челендж.
Джефри РИхтер в своей книге по Windows посвятил этому несколько глав.

В простейшем коде наподобие исходников apache commons io

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    
public static int copy(final InputStream input, final OutputStream output) throws IOException {.....

public static long copyLarge(final InputStream input, final OutputStream output).....

public static long copyLarge(final InputStream input, final OutputStream output, final byte[] buffer)
            throws IOException {
        long count = 0;
        int n;
        while (EOF != (n = input.read(buffer))) {
            output.write(buffer, 0, n);
            count += n;
        }
        return count;
    }


простота принесена в жертву производительности. В этом однопоточном приложении примерно 50%
времени мы ожидаем чтения блока и 50% времени ожидаем его записи. Чтоб ускорить это нужны
другие подходы. Нужна разделяемая память для процесса (потока в Java) читателя и писателя
одновременно. Или можно почитать про библиотеку nio. Возможно там эта задача уже решена
как-то по другому.

Но эта оптимизация даст преимущество когда у тебя не ноутбук а хорошая рабочая станция с 2 независимыми SATA-3 дисками
или комбинация SATA/SSD.

Тест с Far менеджером может быть фейком при многократных повторах. Здесь надо
смотреть настройки FAR. рекомендую тебе повторить эксперимент с нуля сразу
после физического ребута операционки. Резульат может быть другой.

Вообще все современные файловые системы и хранилища сопротивляются бенчмаркам
и хотят тебя обмануть. Операционка пытается кешировать чтение и запись. Еще хуже - экзотические
файловые системы. Я недавно сам обманулся копируя на флешку в формате f2fs.
Она скопировала файлы мгновенно. Но еще минут 15 в фоновом режиме на самом
деле дописывала данные. И выдергивать ее было нельзя.

Вобщем задай себе сам вопрос что тебе надо? Просто поставить джоб на копирование.
Или получить самый последний байт физически лежащим в destination. И между
этими двумя вопросами еще - такой ползунок который можно подвигать влево
и вправо. Тоесть быстрее и ненадёжнее. Или медленнее и надежнее.

Или можно вообще не копировать. Если ты - счастливый обладатель современного Linux,
то тебе доступны операции COW (copy-on-write) которые просто делают интеллектуальный
софт-линк на тело файла. Это работает только в рамках одной локальной файловой системы.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Копирование файлов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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