Главная » Просмотр файлов » К. Арнольд, Д. Гослинг - Язык программирования Java

К. Арнольд, Д. Гослинг - Язык программирования Java (1160779), страница 15

Файл №1160779 К. Арнольд, Д. Гослинг - Язык программирования Java (К. Арнольд, Д. Гослинг - Язык программирования Java) 15 страницаК. Арнольд, Д. Гослинг - Язык программирования Java (1160779) страница 152019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 15)

Вслучае неудачного завершения команды возбуждается исключение LSFailedException:// java.io.* и java.util.* импортированыpublic String[] ls(String dir, String opts)throws LSFailedException{try {// запустить процессString[] cmdArray = { "/bin/ls", opts, dir };Process child = Runtime.getRuntime().exec(cmdArray);DataInputStreamin = new DataInputStream(child.getInputStream());// прочитать выходные данныеVector lines = new Vector();String line;while ((line = in.readLine()) != null)lines.addElement(line);if (child.waitFor() != 0) // если выполнение ls// было неудачнымthrow new LSFailedException(child.exitValue());String[] retval = new String{lines.size()];lines.copyInto(retval);return retval;} catch (LSFailedException e) {throw e;} catch (Exception e) {throw new LSFailedException(e.toString());}}Класс Process является абстрактным. Каждая реализация Java должна содержать один или несколько классов, расширяющих Process, которыемогут взаимодействовать с процессами на уровне операционной системы.

Такие классы могут обладать расширенным набором функций,полезных для программирования в данной среде. Информация о расширенных функциях должна содержаться в документации.Две другие формы exec позволяют задать набор переменных среды (environment variables ) — системно-зависимых переменных, доступных длянового процесса. Переменные среды передаются методу exec в виде строкового массива, каждый элемент которого задает имя и значениепеременной среды в форме имя = значение.

Имя не может содержать пробелов, хотя значение может быть произвольным. Переменные средыпередаются вторым параметром:public Process exec(String command, String[] env)throws IOExceptionpublic Process exec(String[] command, String[] env)throws IOExceptionСпособ интерпретации переменных среды процессом-потомком является системно-зависимым.

Механизм переменных среды поддерживаетсяпотому, что он существует на самых разных платформах. Для передачи информации между Java-программами следует пользоваться свойствами,а не переменными среды.Упражнение 14.2Напишите программу, которая выполняет exec для аргументов, переданных в командной строке, и выводит результаты работы, причем каждойстроке предшествует ее номер.Упражнение 14.3Напишите программу, которая выполняет exec для аргументов, переданных в командной строке, и выводит результаты, прекращая работупроцесса, когда на выходе появляется заранее определенная строка.14.5.

Класс RuntimeОбъекты класса Runtime описывают состояние runtime-системы Java и те операции, которые она может выполнить. Для получения объектаRuntime, соответствующего текущему runtime-контексту, следует вызвать статический метод Runtime.getRuntime.Одна из операций, выполняемых текущим runtime-контекстом, — получение входного или выходного потока, переводящего символылокального набора в их Unicode-эквиваленты. Многие существующие системы работают с национальными алфавитами, использующими 8разрядные или иные наборы символов, конфликтующие с Unicode. Runtime-контекст предоставляет средства для перевода символов потока,работающего с локальным набором, в эквивалентные им символы Unicode. Например, клавиатура может генерировать 8-разрядный символьныйкод Oriya.

Если воспользоваться потоком System.in, который читает символы с этой клавиатуры и получает от нее локализованный входнойпоток, символы Oriya будут переводиться в их 16-разрядные эквиваленты Unicode в диапазоне \u0b00–\u0b7f. Локализованный выходной потоквыполняет обратное преобразование.Runtime-контекст может быть уничтожен, для этого следует вызвать его метод exit и передать ему код завершения. Метод уничтожает все потокив текущем runtime-контексте, независимо от их состояния. При этом для уничтожения потоков не используется исключение ThreadDeath; онипросто останавливаются без выполнения условий finally.

Для уничтожения всех программных потоков в вашей группе лучше пользоватьсяметодом Thread Group.stop, который позволяет потокам выполнить завершающие действия в соответствии с условиями finally.По традиции, завершающий код exit, равный нулю, означает успешное завершение задачи, а отличный от нуля — неудачу. Существует дваспособа передачи информации с кодом завершения. Первый — немедленно вызвать exit и остановить все потоки.

Второй — убедиться, что всепотоки “чисто” завершились , и только потом вызывать exit. Приведенный ниже пример останавливает все потоки в текущей группе, дает имзавершиться и затем вызывает exit:public static void safeExit(int status) {// получить список всех потоковThread myThrd = Thread.currentThread();ThreadGroup thisGroup = myThrd.getThreadGroup();int count = thisGroup.activeCount();Thread[] thrds = new Thread[count + 20]; // +20 на всякий// случайthisGroup.enumerate(thrds);// остановить все потокиfor (int i = 0; i << thrds.length; i++) {if (thrds[i] != null && thrds[i] != myThrd)thrds[i].stop();}// дождаться завершения всех потоковfor (int i = 0; i << thrds.length; i++) {if (thrds[i] != null && thrds[i] != myThrd) {try {thrds[i].join();} catch (InterruptedException e) {// пропустить поток}}}// теперь можно выходитьSystem.exit(status);}Упражнение 14.4Модифицируйте метод safeExit так, чтобы он обрабатывал потоки, которые могли быть созданы после вызова enumerate.

Кроме того, методдолжен пропускать потоки-демоны, которые будут уничтожаться автоматически.14.6. РазноеДва метода класса System не принадлежат ни к одной из категорий:public static long currentTimeMillis()Возвращает текущее время по Гринвичу в миллисекундах, считая от начала эпохи (00:00:00 UTC, 1 января 1970 года). Время возвращается в видезначения long, поэтому переполнение наступит лишь в 292280995 году — для большинства практических целей этого вполне хватает. Для болеесложных приложений может пригодиться класс Date; см. раздел “Класс Date”.public static void arraycopy(Object src, int srcPos, Object dst, int dstPos, int count)Копирует содержимое исходного массива начиная с элемента src[srcPos] в целевой массив с элемента dst[dstPos]. Копируется ровно countэлементов.

Все ссылки на элементы должны лежать в пределах массива, иначе возбуждается исключение IndexOutOfBoundsException. Типыданных исходного массива должны быть совместимы с типами целевого массива, иначе возбуждается исключение ArrayStoreException.“Совместимость” следует понимать следующим образом: для массивов, содержащих ссылки на объекты, каждый объект исходного массивадолжен присваиваться соответствующему элементу целевого массива. Для массивов со значениями встроенных типов типы должны совпадать, ане просто быть совместимыми по присваиванию; метод arraycopy не может применяться для копирования массива short в массив int.Метод arraycopy правильно работает с перекрывающимися массивами, поэтому он может применяться для копирования одной части массива вдругую.

Например, вы можете сдвинуть все содержимое массива на один элемент к началу, как это было сделано в методе squeezeOut.Два трассировочных метода класса Runtime, traceInstructions и trace MethodCalls, также не относятся ни к одной категории. Каждому из нихпередается логический аргумент; если он равен true, включается трассировка инструкций или вызовов методов соответственно. Чтобыотключить трассировку, следует вызвать метод с аргументом равным false. Каждая реализация может поступать с этими вызовами так, как сочтетнужным, в том числе и игнорировать их, если некуда вывести результаты трассировки.

Вероятно, эти методы будут применяться в первуюочередь в средах разработки.14.7. БезопасностьКласс System содержит два метода для работы с объектом класса Security Manager. Класс SecurityManager включает в себя методы, которыеразрешают или запрещают открытие сокетов (sockets), доступ к файлам, создание программных потоков и т. д. Подробности о работе менеджерабезопасности приведены в спецификации “Java Language Specification”.public static void setSecurityManager(SecurityManager s)Задает системный объект, который является менеджером безопасности. Данное значение может быть присвоено только один раз, чтобы принастройке безопасности системы можно было рассчитывать на то, что оно не изменится.public static SecurityManager getSecurityManager()Выдает системный объект менеджера безопасности. Описание менеджера безопасности слишком усложнило бы эту книгу; за подробностямиобращайтесь к онлайновой документации.14.8.

Характеристики

Тип файла
PDF-файл
Размер
1,1 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее