As Dain S pointed out, currently Input-/OutputStream deal with close() in a way that is both incompatible with default JDK behavior, and potentially wrong wrt buffer recycling. The thing is that JDK actually expects an IOException to be thrown, when read/write is done on closed stream; and although there may deviations (I think System.out/err do not do this for example; nor StringWriter), I think we should throw an exception (and at most allow exception throwing be disabled as and option).
As Dain S pointed out, currently Input-/OutputStream deal with close() in a way that is both incompatible with default JDK behavior, and potentially wrong wrt buffer recycling. The thing is that JDK actually expects an IOException to be thrown, when read/write is done on closed stream; and although there may deviations (I think System.out/err do not do this for example; nor StringWriter), I think we should throw an exception (and at most allow exception throwing be disabled as and option).