Normalmente, você primeiro leria o fluxo de entrada e, em seguida, o fecharia. Você pode envolver o FileInputStream em outro InputStream (ou Leitor). Ele será fechado automaticamente quando você fechar o fluxo / leitor de empacotamento.
Se este for um método que retorna um InputStream para o chamador, é responsabilidade do chamador fechar o fluxo quando terminar com ele. Se você fechá-lo em seu método, o chamador não poderá usá-lo.
Para responder a alguns de seus comentários ...
Para enviar o conteúdo de InputStream a um consumidor remoto, você deve gravar o conteúdo de InputStream em um OutputStream e, em seguida, fechar os dois fluxos.
O consumidor remoto não sabe nada sobre os objetos de fluxo que você criou. Ele apenas recebe o conteúdo, em um InputStream que ele irá criar, ler e fechar.