Почему InputStream и OutputStream реализуют Closeable, и Socket не делает?

Самая успешная схема, которую я когда-либо использовал на проекте, объединила резервные копии и дифференциальные файлы SQL. В основном мы взяли бы резервное копирование нашего дб после каждого выпуска и сделали бы дамп SQL так, чтобы мы могли создать пустую схему с нуля, если бы мы должны были также. Тогда каждый раз, когда необходимо было внести изменение в DB, Вы добавите изменить документ на получение к sql каталогу при управлении версиями. Мы всегда снабжали бы префиксом порядковый номер или дату к имени файла, таким образом, первое изменение будет чем-то как 01_add_created_on_column.sql, и следующий сценарий был бы 02_added_customers_index. Наша машина CI проверила бы на них и выполнила бы их последовательно на новой копии дб, который был восстановлен от резервного копирования.

у Нас также были некоторые сценарии на месте, что devs мог использовать, чтобы повторно инициализировать их локальный дб к текущей версии с единственной командой.

8
задан Kara 17 February 2014 в 18:44
поделиться

3 ответа

Closeable был представлен в Java5, тогда как Socket был представлен в JDK 1.0. В сокет Java7 будет Closeable .

EDIT

Вы можете использовать отражение, чтобы закрыть любой «закрываемый» объект в Java 4/5/6, просто проверив наличие метода закрытия. Использование этой техники позволяет закрыть, скажем, ResultSet (который имеет метод close (), но не реализует Closeable):

public static universalClose(Object o) {
    try {
        o.getClass().getMethod("close", null).invoke(o, null);
    } catch (Exception e) {
        throw new IllegalArgumentException("missing close() method");
    }   
}
8
ответ дан 5 December 2019 в 20:18
поделиться

открытый интерфейс Closeable

Closeable - это источник или место назначения данных. что можно закрыть. Метод закрытия вызывается для освобождения ресурсов, которые объект удерживается (например, открытый файлов).

Я думаю, это связано с тем, что сам сокет не является источником или получателем данных, а является потоком ввода / вывода, связанным с сокетом.

0
ответ дан 5 December 2019 в 20:18
поделиться

Понятия не имею, но я полагаю, что в то время они считали, что он на nio SocketChannel достаточно хорош ...

Кроме того, Socket существует уже давно. Новый код, который начал называть его Closeable вместо вызова Socket.close (), не будет обратно совместим, поэтому, возможно, во время 1.5 (когда они добавили Closeable) они просто не думали, что это того стоит, учитывая, что довольно многие пользователи все равно захотят быть совместимыми с 1.4, и, поскольку у него нет других общих интерфейсов, вы редко относитесь к нему как к чему-либо, кроме Socket.

Думаю, обратная совместимость с 1.4 в настоящее время не является проблемой, что может быть причиной того, что она появилась в Java 7.

"akappa" имеет другое значение, IMHO.

Новый код, который начал называть его Closeable вместо вызова Socket.close (), не будет обратно совместим, поэтому, возможно, во время 1.5 (когда они добавили Closeable) они просто не думали, что это того стоит, учитывая, что довольно многие пользователи все равно захотят быть совместимыми с 1.4, и, поскольку у него нет других общих интерфейсов, вы редко относитесь к нему как к чему-либо, кроме Socket.

Думаю, обратная совместимость с 1.4 в настоящее время не является проблемой, что может быть причиной того, что она появилась в Java 7.

"akappa" имеет другое значение, IMHO.

Новый код, который начал называть его Closeable вместо вызова Socket.close (), не будет обратно совместим, поэтому, возможно, во время 1.5 (когда они добавили Closeable) они просто не думали, что это того стоит, учитывая, что довольно многие пользователи все равно захотят быть совместимыми с 1.4, и, поскольку у него нет других общих интерфейсов, вы редко относитесь к нему как к чему-либо, кроме Socket.

Я думаю, что обратная совместимость с 1.4 в настоящее время не является проблемой, что может быть причиной того, что она входит в Java 7.

"akappa" имеет другой допустимый момент, IMHO.

Я не думаю, что это стоило усилий, учитывая, что довольно много пользователей все еще хотели бы быть совместимыми с 1.4, и поскольку у него нет других общих интерфейсов, вы редко относитесь к нему как к чему-либо, кроме Socket.

Я думаю, что обратная совместимость с 1.4 в настоящее время не является проблемой, что может быть причиной того, что она входит в Java 7.

"akappa" имеет другой допустимый момент, IMHO.

Я не думаю, что это стоило усилий, учитывая, что довольно много пользователей все еще хотели бы быть совместимыми с 1.4, и поскольку у него нет других общих интерфейсов, вы редко относитесь к нему как к чему-либо, кроме Socket.

Думаю, обратная совместимость с 1.4 в настоящее время не является проблемой, что может быть причиной того, что она появилась в Java 7.

"akappa" имеет другое значение, IMHO.

0
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: