Обычно вы сначала читаете из входного потока, а затем закрываете его. Вы можете обернуть FileInputStream в другой InputStream (или Reader). Он будет автоматически закрыт, когда вы закроете поток / ридер упаковки.
Если это метод, возвращающий InputStream вызывающей стороне, то ответственность за закрытие потока по завершении с ним лежит на вызывающей стороне. Если вы закроете его в своем методе, вызывающий не сможет его использовать.
Чтобы ответить на некоторые ваши комментарии ...
Чтобы отправить содержимое InputStream удаленному потребителю, вы должны записать содержимое InputStream в OutputStream, а затем закрыть оба потока.
Удаленный потребитель ничего не знает о созданных вами объектах потока. Он просто получает контент в InputStream, который он создаст, прочитает и закроет.