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

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

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

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

К этому типу относятсяпотоки System.out и Sy stem.err.Кроме указанных выше типов, имеются еще несколько полезных классов ввода/вывода:●●●Класс File (не путать с потоковым классом File!) предназначен для работы с именами и путями файлов в локальной файловой системе. Онвключает разделители для компонентов пути, локальный разделитель- суффикс и ряд полезных методов для работы с именами файлов.RandomAccessFile позволяет работать с файлами на уровне потоков с произвольным доступом. Он реализует интерфейсы DataInput иData Output, а также большинство методов ввода/вывода классов Input Stream и OutputStream.Класс StreamTokenizer разбивает InputStream на отдельные лексемы.

Он представляет входной поток в виде понятных “слов”, что частобывает необходимо при синтаксическом анализе введенных пользователем выражений.Все эти классы могут расширяться и порождать новые разновидности потоковых классов, предназначенные для конкретных приложений.11.5. Фильтрующие потокиФильтрующие потоки добавляют несколько новых конструкторов к базовым конструкторам классов InputStream и OutputStream. Им передаетсяпоток соответствующего типа (входной или выходной), с которым необходимо соединить объект.

Фильтрующие потоки позволяют объединятьпотоки в “цепочки” и тем самым создавать составной поток с большими возможностями. Приведенная программа печатает номер строки файла,в которой будет обнаружено первое вхождение заданного символа:import java.io.*;class FindChar {public static void main (String[] args)throws Exception{if (args.length != 2)throw new Exception("need char and file");int match = args[0].charAt(0);FileInputStreamfileIn = new FileInputStream(filein);int ch;while ((ch == in.read()) != -1) {if (ch == match) {System.out.println("'" + (char)ch +"' at line " + in.getLineNumber());System.exit(0);}}System.out.println(ch + " not found");System.exit(1);}}Программа создает поток класса FileInputStream с именем fileIn для чтения из указанного файла и затем вставляет перед ним объект классаLineNumberInputStream с именем in.

Объекты LineNumberInputStream получают ввод от входных потоков, за которыми они закреплены, и следятза нумерацией строк. При чтении байтов из in на самом деле происходит чтение из потока fileIn, который получает эти байты из входного файла.Если запустить программу с файлом ее собственного исходного текста и буквой ‘I’ в качестве аргументов, то результат работы будет выглядетьследующим образом:‘I’ at line 10Вы можете “сцепить” произвольное количество объектов FilterInput Stream.

В качестве исходного источника байтов допускается произвольныйобъект InputStream, не обязательно относящийся к классу FilterInput Stream. Возможность сцепления является одним из основных достоинствфильтрующих потоков, причем самый первый поток в цепочке не должен относиться к классу FilterInputStream.Объекты FilterOutputStream могут сцепляться аналогичным образом.

При этом байты, записанные в один выходной поток, будут подвергатьсяфильтрации и записываться в другой выходной поток. Все потоки, от первого до предпоследнего, должны относиться к классу FilterOutputStream,но последний поток может представлять собой любую из разновидностей Output Stream.Применение фильтрующих потоков позволяет усовершенствовать поведение стандартных потоков. Например, чтобы всегда знать номертекущей строки в System.in, можно вставить в начало программы следующий фрагмент:LineNumberInputStreamlnum = new LinenumberInputStream(System.in);System.in = lnum;Во всем остальном тексте программы производятся обычные операции с System.in, однако теперь появляется возможность следить занумерацией строк.

Для этого используется следующий вызов:lnum.getLineNumber();Поток LineNumberInputStream, закрепленный за другим потоком Input Stream, следует контракту последнего, если InputStream — единственныйтип, к которому мог бы относиться данный поток. System.in может быть отнесен только к типу InputStream, так что весь код программы, в которомон используется, вправе рассчитывать только на выполнение контракта этого типа. LineNu m berInputStream поддерживает более широкийспектр функций, так что замена исходного объекта на тот же самый объект с добавленными функциями нумерации строк оказывается вполнедопустимой.Упражнение 11.2Расширьте FilterInputStream для создания класса, который осуществляет построчное чтение и возврат данных, с использованием метода,блокирующего работу программы до появления полной строки ввода.Упражнение 11.3Расширьте FilterOutputStream для создания класса, который преобразует каждое слово входного потока в заглавный регистр (title case).

/См.раздел 13.5 - Примеч. перев/Упражнение 11.4Создайте пару фильтрующих потоковых классов для работы со сжатыми в произвольном формате данными; при этом поток CompressInputStreamдолжен уметь расшифровывать данные, созданные потоком Compress OutputStream.11.6. Класс PrintStreamКласс PrintStream используется каждый раз, когда в вашей программе встречается вызов метода print или println. PrintStream являетсярасширением FilterOutputStream, так что передаваемые байты могут подвергаться фильтрации. Класс содержит методы print и println дляследующих типов:charchar[]intlongfloatdoubleObjectStringbooleanКроме того, простой вызов println без параметров осуществляет переход на другую строку без вывода информации.PrintStream содержит два конструктора.

Один из них — конструктор FilterOutputStream, получающий в качестве параметра объект-поток. Удругого конструктора имеется второй параметр логического типа, который управляет автоматической очисткой (autoflushing) потока. Еслизначение этого аргумента равно true, то запись в поток символа перехода на новую строку ‘\n’ приводит к вызову метода flush. В противномслучае такой символ ничем не отличается от всех остальных, и flush не вызывается.

После конструирования потока его поведение в отношенииавтоматической очистки уже не может быть изменено.При включении автоматической очистки вызов какого-либо из методов write, записывающего массив байтов, приводит к обращению к flush.Символы ‘\n’, которые встречаются внутри массивов, не вызывают flush, независимо от состояния флага автоматической очистки.Методы print(String) и print(char[]) являются синхронизированными. Все остальные методы print и println реализуются с помощью этих двухметодов, так что печать в объект PrintStream является безопасной при многопоточной работе.11.7.

Буферизованные потокиОбъекты классов BufferedInputStream и BufferedOutputStream обладают свойством буферизации, благодаря чему удается избежать вызоваопераций чтения/записи при каждом новом обращении к потоку. Эти классы часто используются в сочетании с файловыми потоками — работа сфайлом на диске происходит сравнительно медленно, и буферизация позволяет сократить количество обращений к физическому носителю.При создании буферизованного потока можно явно задать размер буфера или положиться на значение, принятое по умолчанию.Буферизованный поток использует массив типа byte для промежуточного хранения байтов, проходящих через поток.Если метод read вызывается для пустого потока BufferedInputStream, он выполняет следующие действия: обращается к методу read потокаисточника, заполняет буфер максимально возможным количеством байтов и возвращает запрошенные данные из буфера.Аналогично ведет себя и BufferedOutputStream.

Когда очередной вызов write приводит к заполнению буфера, вызывается метод write потокаприемника, направляющий содержимое буфера в поток.Буферизованный выходной поток, используемый для записи данных в файл, создается следующим образом:OutputStream bufferedFile(String path)throws IOExceptioon{OutputStream out = new FileOutputStream(path);return new BufferedOutputStream(out);}Сначала для указанного пути создается FileOutputStream, затем порождается BufferedOutputStream и возвращается полученный буферизованныйобъект-поток. Подобная схема позволяет буферизовать вывод, предназначенный для занесения в файл.Чтобы пользоваться методами объекта FileOutputStream, необходимо сохранить ссылку на него, поскольку для фильтрующих потоков несуществует способа получить объект, следующий за данным объектом-потоком в цепочке. Перед тем как работать со следующим потоком,необходимо очистить буфер, иначе данные в буфере не достигнут следующего потока.11.8.

Байтовые потокиБайтовые массивы, используемые в качестве источников входных или приемников выходных потоков, могут применяться для построение строкс данными для печати, декодирования данных и т. д. Эти возможности предоставляются потоками ByteArray. Методы потоков ByteArray являютсясинхронизированными, а следовательно — безопасными в условиях многопоточной среды.Класс ByteArrayInput использует в качестве источника данных массив типа byte. Он содержит два конструктора:public ByteArrayInputStream(byte[] buf)Создает объект ByteArrayInputStream по заданному байтовому массиву.

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

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

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

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