Я предполагаю, что суть вашего беспокойства в том, что у вас нет "утечки", если ресурсы остаются открытыми.
Насколько я знаю, пока основной ресурс закрывается, вы выиграли нет утечки, поскольку этот базовый объект (с нативными методами) - это то, что говорит с ОС и поддерживает ресурс открытым.
Поскольку в документации сказано, что он просто перенаправляет в поток (я выделил жирным шрифтом) затем закрытие самого InputStream
закроет единственный фактический ресурс, так как Channel.newChannel(InputStream)
не создает новый ресурс.
Я бы, однако, лучше открыл ваш канал в попытке с ресурсами и позволил ему быть закрывается автоматически, что приведет к каскадному подключению к базовому ресурсу.
Пользователь Slaw имеет правильную идею о том, что InputStream
ничего не знает о канале (за исключением особого случая FileInputStream
, как показано Алексом) , Это одна из причин, по которой вам следует закрывать ресурсы оболочки, а не , а просто базовые ресурсы, чтобы ваши оболочки имели постоянные знания о реальном ресурсе.
java .nio.channels.Channels.newChannel (InputStream) - Java 1.8 API
Создает канал, который читает байты из данного потока .
Полученный канал не будет буферизован; он просто перенаправит свои операции ввода-вывода в указанный поток . Закрытие канала, в свою очередь, приведет к закрытию потока.
Параметры:
in - Поток, из которого считываются байты
Возвращает:
Новый читаемый байтовый канал