Зазвичай спочатку читаєте з вхідного потоку, а потім закриваєте його. Ви можете обернути FileInputStream в інший InputStream (або Reader). Він автоматично закриється, коли ви закриєте обгортковий потік / зчитувач.
Якщо це метод, який повертає InputStream абоненту, тоді відповідальність за виклик повинен закрити потік, коли закінчиться з ним. Якщо ви закриєте його у своєму методі, абонент не зможе ним скористатися.
Щоб відповісти на деякі ваші коментарі ...
Щоб надіслати вміст InputStream віддаленому споживачеві, ви б написали вміст InputStream у OutputStream, а потім закрили обидва потоки.
Віддалений споживач нічого не знає про створені вами потокові об’єкти. Він просто отримує вміст у InputStream, який він буде створювати, читати та закривати.