JavaScript. Подробное руководство, 6-е издание, стр. 162

<b>      JOptionPane.ERROR.MESSAGE); </b>

<b>  } </b>

<b>});</b>

<b>// Использует java.net.URL и др. для загрузки содержимого URL и использует java.io.File </b>

<b>// и др. для сохранения этого содержимого в файле. Отображает ход выполнения загрузки </b>

<b>// в компоненте JProgressBar. Эта функция вызывается в новом потоке выполнения, </b>

<b>function download(url, file) {</b>

<b>  try {</b>

<b>    // Каждый раз, когда запускается загрузка очередного файла,</b>

<b>    // необходимо добавить в окно новую строку для отображения URL,</b>

<b>    // имени файла и индикатора хода выполнения операции </b>

<b>    var row = Box.createHorizontalBox(); // Создать строку</b>

<b>row.setBorder(padding); // Добавить отступы </b>

<b>var label = url.toString() + &quot;: &quot;;// Отобразить URL </b>

<b>row.add(new JLabel(label)); // в компоненте JLabel </b>

<b>var bar = new JProgressBar(0, 100); // Создать полосу индикатора </b>

<b>bar.stringPainted = true; // Отобразить имя файла </b>

<b>bar.string = file.toString(); // в полосе индикатора </b>

<b>row.add(bar);// Добавить индикатор в строку </b>

<b>col.add(row);// Добавить строку в колонку </b>

<b>frame.pack(); // Изменить размер окна</b>

<b>    // Здесь еще не известен размер загружаемого файла, поэтому изначально </b>

<b>    // индикатор просто воспроизводит анимационный эффект </b>

<b>    bar.indeterminate = true;</b>

<b>    // Установить соединение с сервером и получить размер загружаемого</b>

<b>    // файла, если это возможно</b>

<b>    var conn = url.openConnection();  // Получить java.net.URLConnection </b>

<b>    conn.connect();     // Подключиться и ждать заголовки</b>

<b>    var len = conn.contentLength;      // Проверить, получена ли длина файла</b>

<b>    if (len) {     // Если длина известна, тогда</b>

<b>      bar.maximum = len;     // настроить индикатор на вывод</b>

<b>      bar.indeterminate = false;     // процента выполнения задания</b>

<b>    }</b>

<b>    // Получить потоки ввода и вывода</b>

<b>    var input = conn.inputStream; // Прочитать байты с сервера</b>

<b>    var output = new FileOutputStream(file); // Записать в файл </b>

<b>    // Создать входной буфер в виде массива размером 4 Кбайта</b>

<b>    var buffer = java.lang.reflect.Array.newlnstance(java.lang.Byte.TYPE,4096);</b>

<b>    var num;</b>

<b>    while((num=input.read(buffer)) != -1) { // Читать до признака EOF</b>

<b>       output.write(buffer, 0, num); // Записать байты в файл</b>

<b>       bar.value += num; // Обновить индикатор</b>

<b>    }</b>

<b>    output.close(); // Закрыть потоки по завершении</b>

<b>    input.close();</b>

<b>  }</b>

<b>  catch(e) { // Если что-то пошло не так, вывести ошибку в индикаторе </b>

<b>    if (bar) {</b>

<b>      bar.indeterminate = false; // Остановить анимацию</b>

<b>      bar.string = e.toString(); // Заменить имя файла сообщением</b>

<b>    }</b>

<b>  }</b>

<b>}</b>

12.2. Асинхронный ввод/вывод в интерпретаторе Node

Node - это быстрый интерпретатор JavaScript, написанный на языке C++, включающий средства доступа к низкоуровневым интерфейсам Unix для работы с процессами, файлами, сетевыми сокетами и так далее, а также к клиентским и серверным интерфейсам реализации протокола HTTP. За исключением нескольких синхронных методов, имеющих специальные имена, все остальные инструменты интерпретатора Node доступа к интерфейсам Unix являются асинхронными, и по умолчанию программы, выполняемые под управлением Node, никогда не блокируются, что обеспечивает им хорошую масштабируемость и позволяет эффективно справляться с высокой нагрузкой. Поскольку прикладные программные интерфейсы являются асинхронными, интерпретатор Node опирается на использование обработчиков событий, которые часто реализуются с использованием вложенных функций и замыканий. [26]

Этот раздел освещает некоторые наиболее важные инструменты и события, имеющиеся в составе Node, но это описание ни в коем случае нельзя считать полным. Полное описание Node можно найти в электронной документации по адресу http://nodejs.org/api/.

Как получить Node

Node - это свободное программное обеспечение, которое можно загрузить по адресу http://nodejs.org. На момент написания этих строк интерпретатор все еще активно разрабатывался и скомпилированные дистрибутивы не были доступны, однако вы можете собрать собственную копию интерпретатора из исходных текстов. Примеры в этом разделе опробовались под управлением версии Node 0.4. Прикладной интерфейс интерпретатора еще не зафиксирован, однако основные функции, демонстрируемые в этом разделе, едва ли сильно изменятся в будущем.