Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NIO, copy file 
V
    Опции темы
Tony
Дата 21.11.2006, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Использовал постаянно NIO. Ну вродибы класс. Высокая производительность, новая технологоя и сантехники рекомендуйют ну каро4е 4ики - пики. Так я любитель поэкперементировать. 4то будет если скопировать файл размером в 1.5 Гига ,стандартным методом:  smile 
Код

try {
              FileChannel in = new FileInputStream("d:/1.zip").getChannel();
              FileChannel out = new FileOutputStream("d:/2.zip").getChannel();            
              in.transferTo(0, in.size(), out);              
              in.close();
              out.close();
            }catch(Exception e){
                e.printStackTrace();
            }

Так вот на 20 секунде компик завис  smile . 4ерез 20 секунд отвис и выволился супер Exception  smile 
Код

java.io.IOException: Not enough storage is available to process this command
    at sun.nio.ch.FileChannelImpl.map0(Native Method)
    at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:742).....

У кого какие соображения? При4ём компик Athlon 64 3500+ и 1GB DDR 800. Вот такие дела.

Это сообщение отредактировал(а) Tony - 21.11.2006, 01:14


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Goliath
Дата 21.11.2006, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 1.3.2005

Репутация: 1
Всего: 5



Цитата(Tony @  21.11.2006,  01:10 Найти цитируемый пост)
Так вот на 20 секунде компик завис

Комп зависает или приложение?
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
Tony
Дата 21.11.2006, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



комп

Это сообщение отредактировал(а) Tony - 21.11.2006, 16:50


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Tony
Дата 21.11.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Код

 FileChannel in = new FileInputStream(new File("d:/1.zip")).getChannel();
             FileChannel out = new FileOutputStream (new File("d:/2.zip")).getChannel();
            // int count = 0;
             ByteBuffer buffer = ByteBuffer.allocate(12 * 1024);

             long start = System.currentTimeMillis();
             // result standart io 213610 ms byte[12 * 1024] 
             // allocate  byte buffer 212906 ms
             // allocateDirect byte buffer 211844 ms
             while (in.read(buffer)!= -1){
                 buffer.flip();
                 out.write(buffer);
                 buffer.clear();
             } 
             long end = System.currentTimeMillis();
             System.out.println(end-start);
             in.close();
             out.close();
            }catch(Exception e){
                e.printStackTrace();
            }

1.zip = 1.578.939 KB .Как видно результат НИО не очень впе4атлителен.

Это сообщение отредактировал(а) Tony - 21.11.2006, 17:33


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 21.11.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Каков размер файла подкачки, и какая стоит ОС и JVM (32-х разрядная или 64-х разрядная)?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 21.11.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



WinXP 32, client jvm. 1536 мб файл подкачки.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 21.11.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Tony @  21.11.2006,  20:16 Найти цитируемый пост)
WinXP 32, client jvm. 1536 мб файл подкачки.

Думаю что в этом то и проблема, по стеку видно что он пытается замапить файл на память (memory-mapped file). И ему элементарно нехватает адресного пространства (у пользовательского процесса под 32-х битной виндой адресное пространство 2Гб).
Было бы интерестно посмотреть как этот код будет работать под 64-х битной виндой и 64-х битной JVM.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.11.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Прсто если ползоватеь будет копировать моей программой испoльзующий transferTo метод,  файил размером 1ГБ ,то я услышу "хорошие" отзывы от него.

Это сообщение отредактировал(а) Tony - 22.11.2006, 13:33


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Goliath
Дата 22.11.2006, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 1.3.2005

Репутация: 1
Всего: 5



Цитата(Tony @  22.11.2006,  13:31 Найти цитируемый пост)
Прсто если ползоватеь будет копировать моей программой испoльзующий transferTo метод,  файил размером 1ГБ ,то я услышу "хорошие" отзывы от него.

Насколько я знаю файл менеджеры производят копирование по кусочкам, а некоторые просто меняют данные в таблицы расположения фалов на жестком диске (неуверен что правильно назвал).
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
LSD
Дата 22.11.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Сделай так:
Код
  public static final long MAX_COPY_SIZE = 128 * 1024 * 1024;

  public static void copy(String input, String output)
  {
    try
    {
      FileChannel in = new FileInputStream(new File(input)).getChannel();
      FileChannel out = new FileOutputStream(new File(output)).getChannel();

      long curPos = 0L;
      long size = in.size();
      while(curPos < size)
      {
        long toCopy = size - curPos;
        if(toCopy > MAX_COPY_SIZE)
          toCopy = MAX_COPY_SIZE;
        curPos += in.transferTo(curPos, toCopy, out);
      }

      in.close();
      out.close();
    }
    catch(IOException e)
    {
      e.printStackTrace();
    }
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.11.2006, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Тоже самое 4то и 
Код

 while (in.read(buffer)!= -1){
                 buffer.flip();
                 out.write(buffer);
                 buffer.clear();
             } 




--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 22.11.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Таки в чем проблема?
У меня копирование с помощью NIO быстрее на 20-40 процентов.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.11.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Просто запостил тему 4тобы люди были осторожными при копирование больших файлов через TransferTo и TransferFrom. 


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 23.11.2006, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



А.... Учтем smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0862 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.