Быстрый copy file

  1. public void copy(File src, File dst) throws IOException {
  2.     if (dst.exists()) {
  3.         dst.delete();
  4.         dst.createNewFile();
  5.     }      
  6.     FileInputStream inStream = new FileInputStream(src);
  7.     FileOutputStream outStream = new FileOutputStream(dst);
  8.     FileChannel inChannel = inStream.getChannel();
  9.     FileChannel outChannel = outStream.getChannel();
  10.     inChannel.transferTo(0, inChannel.size(), outChannel);
  11.     inStream.close();
  12.     outStream.close();
  13. }
I/O операции как мы знаем всегда so slow. Особенно это касается копирования файлов, а уж если они большие (к примеру 2 Gb) то это вообще страх и ужас. Мы все знаем почему так происходит: запись всегда медленнее чтения, копирование обычно идет в цикле с небольшим буфером. Из этого вытакает очень низкая скорость выполнения: проверка при чтении, чтение в бучер, проверка при записи, запись буфера, инкремент (если есть). Вообщем говнокод ад тот еще.
Данное решение позволяет забыть нам о 10 минутном копировании альбома любимой музыки с одной папки в другую, используя NIO API. Все работает очень быстро и качественно. Да и код без циклов выглядит куда приятней. Пользуйтесь.

Реклама

Мы в соцсетях

tw tg yt gt