Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4-1 Мережне програмування / ЛК / Лекция 3 Сетевое программирование - IO Streams.pptx
Скачиваний:
118
Добавлен:
02.02.2021
Размер:
787.65 Кб
Скачать

Потоки ввода/вывода (Java I/O Fundamentals)

2017

Содержание лекции

1.Потоки ввода/вывода.

2.Использование потоков для чтения и записи данных в файл.

3.Сериализация.

4.Чтение и запись информации с консоли.

Литература

1.Герберт Шилдт "Java 7. Полное руководство" (8-е издание). Гл. 19. стр. 595-639

2.Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 and 1Z0-805: A Comprehensive OCPJP 7 Certification Guide. Гл. 8. стр. 225-250.

Потоки ввода / вывода

Поток (Stream) – это абстракция, которая представляет собой последовательность передаваемых или принимаемых данных. Потоки ввода/вывода используются для передачи данных в файловые потоки, на консоль или на сетевые соединения. Потоки представляют собой объекты соответствующих классов. Библиотека ввода/вывода предоставляет пользователю большое число классов и методов и постоянно обновляется. Некоторые потоки просто передают данные, другие обрабатывают и преобразовывают их в удобном виде.

Программа использует входной поток для чтения данных из источника, последовательно

Чтение информации в программе

Программа использует выходной поток для записи данных в пункт назначения, последовательно

Запись информации из программы

Символьные и байтовые потоки

Файлы которые используются в работе за компьютером можно условно разделить на две группы. Это текстовые файлы, которые может прочитать человек (например .java) и двоичные файлы хранящие информацию для обработки программой, которые нечитаемы для человека (например .exe).

Пакет java.io содержит классы для поддержки символьных и байтовых потоков. Символьные потоки используются для текстового I/O, байтовые потоки для I/O данных различного формата.

Если вы попробуйте использовать байтовый поток там где нужен поток символов или наоборот, вы получите неприятный сюрприз в ваших программах. Например, файлы растровых изображений ( .bmp) должны быть обработаны с использованием потока байтов и если вы попробуйте использовать символьный поток, ваша программа не будет работать корректно. Так что не перепутайте потоки!

Символьные потоки

Reader

BufferedReader

FilterReader PipedReader

InputStreamReader StringReader

LineNumberReader

PushbackReader

FileReader

Символьные потоки

 

 

Writer

BufferedWriter

FilterWriter

PrintWriter OutputStreamWriter StringWriter

PipedWriter

FileWriter

Чтение текстового файла

В качестве примера рассмотрим программу выводящую содержимое текстового

файла на консоль.

Попытка открыть файл

через FileReader

Цикл пока есть символы для

считывания. Если достигнут конец

файла, метод read вернет -1

try-with-resources автоматически

освободит объект FileReader

BufferedReader inputFile = new BufferedReader( new FileReader(file) );

Буферизированный ввод/вывод

В предыдущем примере для чтения текстового файла создавался символьный поток следующим образом:

FileReader inputFile = new FileReader(file);

При этом используется небуферизованный ввод/вывод, который является менее эффективным по сравнению с буферизированным вводом/выводом. Использования временного внутреннего буфера, который позволит ускорить ввод/вывод. Чтобы программно использовать буфер ввода/вывода, можно передать ссылку на FileReader объекту BufferedReader следующим образом:

Аналогичным образом можно использовать BufferedWriter для буферизации записи. Для потока байтов используются свои классы, такие как BufferedInputStream.

Чтение построчно

Символьный ввод/вывод обычно происходит более крупными порциями чем посимвольно. Одним из распространенных является строковой ввод/вывод.

Конец строки может обозначаться последовательностью символов возврата каретки (CR) и перевода строки (LF) - "\r\n", либо одним из этих символов. Поддерживаемые возможные варианты конца строки что позволяет программам для чтения текстовых файлов, созданных на любой из широко используемых ОС.

Для считывания строки в классе FileReader есть метод readLine().

Метод возвращает строку типа String не включающую символов конца строки или null, если был достигнут конец потока.

Пример:

Программа для копирования файла построчно вызывает методы

BufferedReader.readLine и PrintWriter.println считывая и записывая по целой строке

за раз.

Цикл пока метод не

вернет null

Так как в данном случае try-with-resources не

использовалось, прийдется закрыть потоки

Соседние файлы в папке ЛК