JavaSE_part_5_streams.ppt
- Количество слайдов: 28
Язык программирования JAVA Потоки ввода/вывода
Содержание Поток. Байтовые и символьные потоки. Базовые классы. Блочное копирование. Класс File. Ввод/вывод на консоль. Чтение строк с консоли. Сериализация. Байтовый в символьный и наоборот. Перекодирование файла.
Поток Поток является абстракцией, которая или производит, или потребляет информацию. Все потоки ведут себя одинаковым образом, хотя фактические физические устройства, с которыми они связаны, могут сильно различаться. Благодаря потокам ваша программа выполняет ввод/вывод, не понимая различий между клавиатурой и сетью. Поток скрывает детали низкоуровневых процессов ввода/вывода. В Java система ввода-вывода представлена в java. io. *
Байтовые и символьные потоки Потоки бывают для чтения(ввод) и записи(вывод). Два типа потоков – байтовый и символьный. Чтение с клавиатуры, чтение из файла и т. д. Вывод на консоль, запись в файл и т. д.
Базовые классы Байтовый Символьный Ввод Input. Stream Reader Вывод Output. Stream Writer
Байтовые потоки
Классы - байтовые потоки Поточный класс Bufferedlnput. Stream Buffered. Output. Stream Byte. Array. Input. Stream Byte. Array. Output. Stream Datalnput. Stream Data. Output. Stream Filelnput. Stream File. Output. Stream Filterlnput. Stream Filter. Output. Stream Input. Stream Output. Stream Pipedlnput. Stream Piped. Output. Stream Print. Stream Pushbacklnput. Stream Random. Access. File Sequencelnput. Stream Значение Буферизованный поток ввода Буферизованный поток вывода Поток ввода, который читает из байт-массива Поток вывода, который записывает в байт-массив Поток ввода, который содержит методы для чтения данных стандартных типов Поток вывода, который содержит методы для записи данных стандартных типов Поток ввода, который читает из файла Поток вывода, который записывает в файл Реализует Inputstream Реализует Output. Stream Абстрактный класс, который описывает поточный ввод Абстрактный класс, который описывает поточный вывод Канал ввода Канал вывода Поток вывода, который поддерживает print() и println() Поток (ввода), который поддерживает однобайтовую операцию "unget", возвращающую байт в поток ввода Поддерживает ввод/вывод файла произвольного доступа Поток ввода, который является комбинацией двух или нескольких
Символьные потоки
Классы - символьные потоки Поточный класс Значение Buffered. Reader Буферизированный символьный поток ввода Buffered. Writer Буферизированный символьный поток вывода Char. Array. Reader Поток ввода, которой читает из символьного массива Сhar. Array. Write Выходной поток, который записывает в символьный массив File. Reader Поток ввода, который читает из файла File. Writer Выходной поток, который записывает в файл Filter. Reader Отфильтрованный поток ввода Filter. Writer Отфильтрованный поток вывода Input. Stream. Reader Поток ввода, который переводит байты в символы Line. Number. Reader Поток ввода, который считает строки Output. Stream. Writer Поток ввода, который переводит символы в байты Piped. Reader Канал ввода Piped. Writer Канал вывода Print. Writer Поток вывода, который поддерживает print() и println() Pushback. Reader Поток ввода, возвращающий символы в поток ввода Reader Абстрактный класс, который описывает символьный поток ввода String. Reader Поток ввода, который читает из строки String. Writer Поток вывода, который записывает в строку Writer Абстрактный класс, который описывает символьный поток вывода
Класс Byte. Array. Input. Stream Поток, считывающий (записывающий) данные из массива байт. byte[] bytes ={1, -1, 0}; Byte. Array. Input. Stream in =new Byte. Array. Input. Stream(bytes); int readed. Int =in. read(); //readed. Int=1 readed. Int =in. read(); //readed. Int=255 ? readed. Int =in. read(); //readed. Int=0
Класс Byte. Array. Output. Stream Применяется для записи в массив. Byte. Array. Output. Stream out =new Byte. Array. Output. Stream(); out. write(10); out. write(11); byte[] bytes =out. to. Byte. Array();
Блочное копирование Процедура копирования void copy(Input. Stream is, Output. Stream os) throws IOException { byte[] b = new byte[1024]; int c = 0; while ((c = is. read(b)) >= 0) { os. write(b, 0, c); } }
Класс File Позволяет осуществлять манипуляции с файлами и директориями Создание дескриптора по имени: File(pathname) – абсолютный или относительный путь Создание дескриптора по имени и директории: File(File dir, name) File(String dir, name) Получение информации get. Name() – получить имя get. Path() – получить имя и путь get. Absolute. Path() – получить абсолютный путь get. Absolute. File() – получить абсолютный дескриптор Определение родителя String get. Parent() – как строки File get. Paretn. File() – как дескриптора Платформозависимые разделители separator / separtor. Char – разделитель директорий path. Separator / path. Separator. Char – разделитель в файлов и директорий в путях
Операции с файлами Проверка типа is. File() – является ли файлом is. Directory() – является ли директорией is. Hidden() – является ли скрытым Получение информации о файле exist() – проверка существования length() – длина файла last. Modifier() – время последней модификации Создание mkdir() – создать одну директорию mkdirs() – создать все директории create. New. File() – создать пустой файл Удаление delete() – удалить немедленно delete. On. Exit() – удалить после завершения Переименование / перенос rename. To(file) – переименовать / перенисти в заданное место
Листинг директории Листинг всех файлов String[] list() – получить имена файлов File[] list. Files() – получить дескрипторы файлов Листинг по критерию String[] list(File. Name. Filter) – получить имена файлов File[] list. Files(File. Filter) – получить дескрипторы файлов
Класс File. Input. Stream Поток для чтения из файла по байтам. try { File. Input. Stream fin = new File. Input. Stream("/etc/hosts"); try { int i = -1; while ((i = fin. read()) != -1) { System. out. print((char) i); } } finally { fin. close(); } } catch (File. Not. Found. Exception ex) { System. out. println(ex. get. Message()); } catch (IOException ex) { System. out. println(ex. get. Message()); }
Класс File. Output. Stream Поток для записи в файл по байтам. String text = "Hello world!"; // строка для записи try { File. Output. Stream fos = new File. Output. Stream("notes. txt"); try { // перевод строки в байты byte[] buffer = text. get. Bytes(); fos. write(buffer, 0, buffer. length); } finally { fos. close(); } } catch (File. Not. Found. Exception ex) { System. out. println(ex. get. Message()); } catch (IOException ex) { System. out. println(ex. get. Message()); }
Классы Buffered. Input. Stream и Buffered. Output. Stream Чтение и запись данных происходит из буфера. Ускоряет процесс в несколько раз. Запись в устройство вывода произойдет, когда буфер заполнится. метод flush() или close() - сброс и запись данных try {Buffered. Input. Stream bis = new Buffered. Input. Stream( new File. Input. Stream(new File("/etc/hosts"))); try { int c; while ((c = bis. read()) != -1) { System. out. print((char) c); } } finally { bis. close(); } } catch (Exception e) { System. out. println(e. get. Message()); }
Классы File. Reader и File. Writer writer; try { Reader reader = new File. Reader("notes. txt"); try { writer = new File. Writer("output. txt"); int c = 0; while ((c = reader. read()) >= 0) { writer. write(Character. to. Upper. Case((char) c)); } writer. close(); } finally { reader. close(); } } catch (File. Not. Found. Exception e) { System. out. println(e. get. Message()); } catch (IOException e) { e. print. Stack. Trace();
Байтовый поток в символьный При чтении возможно преобразование байтового потока в символьный, с указанием кодировки Класс Input. Stream. Reader(Input. Stream, encoding)
Ввод/вывод на консоль char ch = 0; Buffered. Reader br = new Buffered. Reader(new Input. Stream. Reader(System. in)); System. out. println("Введите символы, 'q' - для завершения. "); do { try { ch = (char) br. read(); } catch (IOException e) { e. print. Stack. Trace(); } System. out. print(ch); } while(ch != 'q'); Print. Writer pw = new Print. Writer(System. out, true); pw. println("Это строка: "); int i = -7; pw. println(i); double d = 4. 5 e-7; pw. println(d);
Чтение строк с консоли Buffered. Reader br = new Buffered. Reader(new Input. Stream. Reader(System. in)); List
Символьный поток в байтовый При записи возможно преобразование символьного потока в байтовый, с указанием кодировки Класс Output. Stream. Writer(Output. Stream, encoding)
Пример: перекодирование файла try { Reader reader = new Input. Stream. Reader( new File. Input. Stream("input. txt"), "Cp 1251"); Writer writer = new Output. Stream. Writer( new File. Output. Stream("output. txt"), "Cp 866"); int c = 0; while ((c = reader. read()) >= 0) writer. write(c); reader. close(); writer. close(); } catch (File. Not. Found. Exception e) { e. print. Stack. Trace(); } catch (Unsupported. Encoding. Exception e) { e. print. Stack. Trace(); } catch (IOException e) { e. print. Stack. Trace(); }
Сериализация Сериализация – процесс преобразования объекта в последовательность байт. Сериализованный объект легко передать по сети, сохранить в файл. Чтобы объект мог быть сериализован, он должен реализовывать интерфейс java. io. Serializable — маркер, нет ни одного метода. Классы Object. Input. Stream и Object. Output. Stream производят сериализацию и десериализацию объектов. Свойства класса, помеченные модификатором transient, не сериализуются.
Пример сериализации class Person implements Serializable { public String name = null; public int age = 0; } Object. Input. Stream object. Input. Stream; try { Object. Output. Stream object. Output. Stream = new Object. Output. Stream( new File. Output. Stream("person. bin")); try { Person person = new Person(); person. name = "Jakob Jenkov"; person. age = 40; object. Output. Stream. write. Object(person); object. Output. Stream. close(); } finally {object. Output. Stream. close(); } } catch (File. Not. Found. Exception e) {e. print. Stack. Trace(); } catch (IOException e) {e. print. Stack. Trace(); }
Пример десериализации try { object. Input. Stream = new Object. Input. Stream(new File. Input. Stream("person. bin")); try { Person person. Read = (Person) object. Input. Stream. read. Object(); System. out. println(person. Read. name); System. out. println(person. Read. age); } finally { object. Input. Stream. close(); } } catch (File. Not. Found. Exception e) { e. print. Stack. Trace(); } catch (IOException e) { e. print. Stack. Trace(); } catch (Class. Not. Found. Exception e) { e. print. Stack. Trace(); }
Вопросы?


