На этом шаге мы рассмотрим интерфейсы AutoCloseable, Closeable и Flushable
Данные интерфейсы имеют большое значение для классов потоков ввода-вывода. Два из них, интерфейсы Closeable и Flushable, были определены в пакете java.io и внедрены в версии JDK 5. Третий, интерфейс AutoCloseable, был внедрен в версии JDK 7 и входит в состав пакета java.lang.
В версии JDK 7 интерфейс AutoCloseable обеспечивает поддержку нового оператора try с ресурсами, который автоматизирует процесс закрытия ресурса. Только объекты классов, реализующих интерфейс AutoCloseable, могут управляться оператором try с ресурсами. В интерфейсе AutoCloseable определяется единственный метод close():
void close() throws Exception;
Этот метод закрывает вызывающий объект, высвобождая любые ресурсы, которыми он может пользоваться. Метод close() вызывается автоматически по завершении оператора try с ресурсами, избавляя от необходимости вызывать его явным образом. Автоматическое закрытие потоков ввода-вывода гарантирует правильность их освобождения, когда они больше не нужны, предотвращая тем самым утечку памяти и другие осложнения.
В интерфейсе Closeable также определяется метод close(). Начиная с версии JDK 7 интерфейс Closeable расширяет интерфейс AutoCloseable. Поэтому в версии JDK 7 любой класс, реализующий интерфейс Closeable, реализует также интерфейс AutoCloseable.
Объекты класса, реализующего интерфейс Flushable, могут принудительно направить буферизованные данные в тот поток вывода, к которому присоединен данный объект. В этом интерфейсе определяется единственный метод flush(), как показано ниже:
void flush() throws IOException;
Очистка потока вывода обычно приводит к тому, что буферизованные данные физически выводятся на базовое устройство. Этот интерфейс реализуется всеми классами, способными направлять данные в поток вывода.
На следующем шаге мы начнем знакомиться с потоками ввода-вывода байтов