Чтение онлайн

на главную

Жанры

Java: руководство для начинающих
Шрифт:

Для чего в Java определены как байтовые, так и символьные потоки? Байтовые потоки с самого начала были определены в Java. Они особенно удобны для ввода-вывода двоичных данных и поддерживают произвольный доступ к ним в файлах. А символьные потоки оптимизированы для представления в уникоде.

Как известно, ввод-вывод данных на консоль осуществляется в текстовом виде. Почему же в Java для этой цели используются байтовые потоки? Стандартные потоки ввода-вывода System, in, System.out и System.err были определены в Java прежде символьных потоков.

Как открыть файл для чтения байтов? Ниже приведен один из способов открытия файла для ввода данных типа byte. FilelnputStream fin = new FilelnputStream("test");

Как открыть файл для чтения символов? Ниже приведен

один из способов открытия файла для ввода символов. FileReader fr = new FileReader("test");

Как открыть файл для ввода-вывода с произвольным доступом? Ниже приведен один из способов открытия файла для ввода-вывода с произвольным доступом. randfile = new RandomAccessFile("test", "rw");

Как преобразовать числовую строку "123.23" в двоичный эквивалент? Для того чтобы преобразовать числовую строку в двоичный эквивалент, следует воспользоваться одним из методов синтаксического анализа, определенных в классах оболочек типов, например Integer или Double.

Напишите программу, которая будет копировать текстовые файлы. Видоизмените ее таким образом, чтобы все пробелы заменялись дефисами. Используйте при написании программы классы, представляющие байтовые потоки, а также традиционный способ закрытия файла явным вызовом метода close . / Копирование текстового файла с заменой пробелов дефисами. В этой версии программы используются байтовые потоки. Для того чтобы воспользоваться этой программой, укажите в командной строке имена исходного и целевого файлов. Например: java Hyphen source target / import java.io.*; class Hyphen { public static void main(String args[]) { int i; FilelnputStream fin = null; FileOutputStream fout = null; Приложение А. Ответы на вопросы для самопроверки 579 // проверить сначала, указаны ли оба файла if(args.length !=2 ) { System.out.println("Usage: Hyphen From To"); return; } // скопировать файл и заменить в нем пробелы дефисами try { fin = new FilelnputStream(args[0]); fout = new FileOutputStream(args[1]); do { i = fin.read; // преобразовать пробел в дефис if((char)i == ' ') i = if(i != -1) fout.write(i); } while(i != -1); } catch(IOException exc) { System.out.println("I/O Error: " + exc); } finally { try { if (fin != null) fin.closeO; } catch(IOException exc) { System.out.println("Error closing input file."); } try { if(fin != null) fout.close; } catch(IOException exc) { System.out.println("Error closing output file."); } } } }

Перепишите программу, созданную в ответ на предыдущий вопрос, таким образом, чтобы в ней использовались классы, представляющие символьные потоки. На этот раз воспользуйтесь оператором try с ресурсами для автоматического закрытия файла. /* Копирование текстового файла с заменой пробелов дефисами. В этой версии программы используются символьные потоки. Для того чтобы воспользоваться этой программой, укажите в командной строке имена исходного и целевого файлов. Например: java Hyphen2 source target Для компиляции этого кода требуется JDK 7

или более поздняя версия данного комплекта. / import java.io.; class Hyphen2 { public static void main(String args[]) throws IOException { int i; // проверить сначала, указаны ли оба файла if(args.length !=2 ) { System.out.println("Usage: CopyFile From To"); return; } // скопировать файл и заменить в нем пробелы дефисами, // используя оператор try с ресурсами try (FileReader fin = new FileReader(args[0]); FileWriter fout = new FileWriter(args[1])) { do { i = fin.read; // преобразовать пробел в дефис if((char)i == • ') i = if(i != -1) fout.write(i); } while(i != —1); } catch(IOException exc) { System.out.println("I/O Error: " + exc); } } }

К какому типу относится поток System. in? К типу InputStream.

Что возвращает метод read из класса InputStream по достижении конца потока? Значение -1.

Поток какого типа используется для чтения двоичных данных? Поток типа DatalnputStream.

Классы Reader и Writer находятся на вершине иерархии классов символьного ввода-вывода

Оператор try без ресурсов служит для . автоматического управления ресурсами

Если для закрытия файла используется традиционный способ, то это лучше всего делать в блоке finally. Верно или неверно? Верно. Глава 11. Многопоточное программирование

Каким образом имеющиеся в Java средства многопоточного программирования позволяют писать более эффективные программы? Средства многопоточного программирования дают возможность использовать периоды простоя, наступающие практически в любой программе. Когда операции в одном потоке по каким-то причинам не выполняются, в действие вступают другие потоки. В многоядерных системах два и больше потоков могут исполняться одновременно.

Для поддержки многопоточного программирования в Java предусмотрен класс и интерфейс . Для поддержки многопоточного программирования в Java предусмотрен класс Thread и интерфейс Runnable.

В каких случаях следует отдать предпочтение расширению класса Thread над реализацией интерфейса Runnable? Подклассы, производные от класса Thread, целесообразно создавать в тех случаях, когда, помимо метода run , требуется переопределить другие методы данного класса.

Покажите, как с помощью метода j о in можно организовать ожидание завершения потокового объекта MyThrd. MyThrd.join

Покажите, как установить приоритет потока MyThrd на три уровня выше нормального приоритета. MyThrd.setPriority(Thread.N0RM_PRI0RITY+3);

Что произойдет, если в объявлении метода указать ключевое слово synchronized? Если указать ключевое слово synchronized в объявлении метода, то в каждый момент времени этот метод будет вызываться только в одном потоке для любого заданного объекта его класса.

Методы wait и notify служат для . взаимодействия потоков

Внесите в класс TickTock изменения для организации настоящего отчета времени. Первую половину секунды должен занимать вывод на экран слова "Tick", а вторую — вывод слова "Tock". Таким образом, сообщение "Tick-Tock" должно соответствовать одной секунде отсчитываемого времени. (Время переключения контекстов можно не учитывать.) Для организации отчета времени достаточно ввести в классе TickTock вызовы метода sleep , как показано ниже. // Вариант класса TickTock, в который введены вызовы // метода sleep для организации отсчета времени. class TickTock { String state; // Состояние часов synchronized void tick(boolean running) { 582 Javc,/: руководство для начинающих, 5-е издание if(!running) { // остановить часы state = "ticked"; notifyO; // уведомить ожидающие потоки return; } System.out.print("Tick "); // ожидать 1/2 секунды try { Thread.sleep(500); } catch(InterruptedException exc) { System.out.println("Thread interrupted."); } state = "ticked"; // установить текущее состояние после такта "тик" notifyO; // разрешить выполнение метода tock try { while(!state.equals("tocked")) wait ; // ожидать завершения метода tock } catch(InterruptedException exc) { System.out.println("Thread interrupted."); } synchronized void tock(boolean running) { if(!running) { // остановить часы state = "tocked"; notifyO; // уведомить ожидающие потоки return; } System.out.println("Tock"); // ожидать 1/2 секунды try { Thread.sleep(500); } catch(InterruptedException exc) { System.out.println("Thread interrupted."); } state = "tocked"; // установить текущее состояние после такта "так" notifyO; // разрешить выполнение метода tick try { while(!state.equals("ticked")) wait ; // ожидать завершения метода tick } catch(InterruptedException exc) { System.out.println("Thread interrupted."); } Приложение А. Ответы на вопросы для самопроверки 583 } }

Почему в новых программах на Java не следует применять методы suspend , resume и stop? Методы suspend , resume и stop не рекомендуется применять, поскольку они могут стать причиной серьезных осложнений при выполнении программы.

С помощью какого метода из класса Thread можно получить имя потока? С помощью метода getName .

Какое значение возвращает метод is Alive ? Он возвращает логическое значение true, если вызывающий поток исполняется, или логическое значение false, если поток завершен. Глава 12. Перечисления, автоупаковка,

Поделиться:
Популярные книги

Бывший муж

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Бывший муж

Идеальный мир для Социопата 12

Сапфир Олег
12. Социопат
Фантастика:
фэнтези
постапокалипсис
рпг
7.00
рейтинг книги
Идеальный мир для Социопата 12

С Новым Гадом

Юнина Наталья
Любовные романы:
современные любовные романы
эро литература
7.14
рейтинг книги
С Новым Гадом

Как я строил магическую империю

Зубов Константин
1. Как я строил магическую империю
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю

Опер. Девочка на спор

Бигси Анна
5. Опасная работа
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Опер. Девочка на спор

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Мимик нового Мира 5

Северный Лис
4. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 5

Везунчик. Дилогия

Бубела Олег Николаевич
Везунчик
Фантастика:
фэнтези
попаданцы
8.63
рейтинг книги
Везунчик. Дилогия

Маверик

Астахов Евгений Евгеньевич
4. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Маверик

Релокант. По следам Ушедшего

Ascold Flow
3. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. По следам Ушедшего

Sos! Мой босс кровосос!

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Sos! Мой босс кровосос!

Сумеречный Стрелок 4

Карелин Сергей Витальевич
4. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 4

Покоритель Звездных врат

Карелин Сергей Витальевич
1. Повелитель звездных врат
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Покоритель Звездных врат

Эксперимент

Юнина Наталья
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Эксперимент