Хорошо, у вас есть 1 ГБ для чтения и 1 ГБ для записи. В зависимости от вашего жесткого диска вы можете получить скорость чтения около 100 МБ / с и скорость записи 60 МБ / с. Это означает, что чтение и запись займет около 27 секунд.
Какова скорость вашего привода и насколько медленнее вы это видите?
Если вы хотите проверить скорость вашего диска без какой-либо обработки, то сколько времени занимает копирование файла, к которому вы недавно не обращались (т.е. он не находится в кеше диска). Это даст вам представление о минимальная задержка, которую вы можете ожидать, чтобы прочитать, а затем записать большую часть данных из файла (т.е. без обработки или участия Java)
Для тех, кто хочет знать, как сделать копию данных без цикла, т. Е. Он не просто вызывает метод, который зацикливается на вас.
FloatBuffer src = // readable memory mapped file.
FloatByffer dest = // writeable memory mapped file.
src.position(start);
src.limit(end);
dest.put(src);
Если у вас смешанные типы данных, вы можете использовать ByteBuffer, который условно копирует байт за раз, но в действительности может использовать длинный или более широкий тип для копирования 8 или более байт за раз. то есть все, что может делать процессор.
Для небольших блоков это будет использовать цикл, но для больших блоков он может использовать трюки с отображением страниц в ОС. В любом случае, как это происходит, не определено в Java, но, скорее всего, это самый быстрый способ копирования данных.
Большинство этих трюков имеют значение только в том случае, если вы копируете файл, уже находящийся в памяти, в кэшированный файл. Как только вы читаете файл с диска или файл слишком велик для кеширования, пропускная способность ввода-вывода вашего физического диска - единственное, что действительно имеет значение.
Это связано с тем, что процессор может копировать данные со скоростью 6 ГБ / с в основную память, но только 60-100 МБ / с на жесткий диск. Если копия в ЦП / памяти в 2, 10 или 50 раз медленнее, чем могла бы быть, она все равно будет ждать диска. Примечание: без буферизации это вполне возможно и хуже, но при условии, что у вас есть простая буферизация, процессор будет быстрее диска.