- •Первая часть
- •Интерфейсы и классы коллекций.
- •Интерфейсы:
- •Классы:
- •Итераторы:
- •Компараторы:
- •Интерфейсы и классы карт.
- •Интерфейсы:
- •Классы:
- •IndexOfSubList/lastIndexOfSubList – производит поиск “подсписка”.
- •Вторая часть
- •Сериализация объектов.
- •Байтовые потоки.
- •Символьные потоки.
- •Объектные потоки.
- •Третья часть
-
Символьные потоки.
Имена символьных потоков ввода и вывода заканчиваются на Reader и Writer соответственно.
Все потоки реализуют интерфейс Closeable (операция close закрывает поток, после чего, он не может использоваться для чтения и записи), а начиная с версии 7, AutoCloseable, что позволяет использовать потоки в try-with конструкциях. Это позволяет легко обойти ситуацию при которой метод close выбрасывает IOException и гарантирует, что поток будет закрыт автоматически.
Операции потоков связанные с чтением и записью являются блокирующими. В конструкторы символьных потоков может быть передан объект, с помощью которого будут синхронизироваться операции ввода/вывода.
Потоки вывода реализуют Flushable (операция flush выталкивает всю информацию из буфера и записывает её туда, куда надо) и Appendable (методы append работают точно также как и write). Потоки вывода предоставляют набор операций write для записи символа, строк, части строки, массива символов и части массива символов.
Потоки ввода реализуют Readable (операция read – чтение символов в CharBuffer). А также набор методов read для чтения одного символа, чтения в масив и в определенную позицию массива. Метод skip позволяет проигнорировать часть символов потока, он возвращает число символов, которые реально были проигнорированы. Метод ready возвращает true или false в зависимости от того, готов поток или нет, к тому, чтобы из него читали. Методы mark и reset позволяют отметить позицию во время чтения и потом вернуться в нее, если markSupported возвращает true. Метод reset может работать, если метод mark не работает в зависимости от потока. Как правило, имеется в виду, что состояние потока будет сброшено на начальное состояние.
OutputStreamWriter и InputStreamReader являются мостом между символьными и байтовыми потоками – символьными оболочками байтовых потоков. При необходимости «превратить» байтовый поток в символьный поток можно воспользоваться этими классами. При преобразовании можно указать используемую кодировку.
FileWriter и FileReader подклассы OutputStreamWriter и InputStreamReader. Позволяют записывать символы в файл и считывать символы из файла.
CharArrayWriter и CharArrayReader позволяют писать в массив символов и читать из массива символов. StringWriter и StringReader позволяют писать в StringBuffer и читать из строки.
PipedWriter и PipedReader - работают в комбинации: данные записанные в PipedWriter будут считываться из PipedReader. Поток считается сломанным, если нить в которой работал другой поток завершила работу. Использование потоков из оденой нити может привести к блокировке (deadlock).
BufferedWriter и BufferedReader – потоки, которые используют буфер для чтения и записи данных в целевой поток порциями. Размер буфера может быть передан конструктору. BufferedReader предоставляет метод readLine считывающий строку до разделителя.
FilterWriter и FilterReader – фильтрующие символьные потоки. Эти потоки перенаправляют запросы на чтение и запись потоку, переданному в конструктор. Классы являются абстрактными так как не выполняют никакой работы и существуют на случай, если потребуется реализовать фильтрующий символьный поток. В пакете JDK до версии 7 включительно таких потоков не было.
LineNumberReader – BufferedReader считающий количество строк.
PushbackReader - поток, имеющий pusback-буфер (по умолчанию равен 1 символ, но в конструктор может быть передано любое значение). Поток позволяет после прочтения выполнять операцию unread, кладущую данные назад, в поток (используется буфер).
PrintWriter – класс реализующий все методы PrintStream, за исключением тех, которые записывают в поток байты в сыром виде. Этот класс на сегодняшний день рекомендуется к использованию вместо PrintStream. Главной особенностью является возможность работать с «формат строками».