Por lo general, primero leería el flujo de entrada y luego lo cerraría. Puede envolver FileInputStream en otro InputStream (o lector). Se cerrará automáticamente cuando cierre el lector / flujo de envoltura.
Si este es un método que devuelve un InputStream a la persona que llama, entonces es responsabilidad de la persona que llama cerrar la transmisión cuando termine con ella. Si lo cierra en su método, la persona que llama no podrá usarlo.
Para responder a algunos de sus comentarios ...
Para enviar el contenido de InputStream a un consumidor remoto, debe escribir el contenido de InputStream en un OutputStream y luego cerrar ambos flujos.
El consumidor remoto no sabe nada sobre los objetos de flujo que ha creado. Simplemente recibe el contenido en un InputStream que creará, leerá y cerrará.