Class ReleasableInputStream

All Implemented Interfaces:
Closeable, AutoCloseable, Releasable
Direct Known Subclasses:
ResettableInputStream

@NotThreadSafe public class ReleasableInputStream extends SdkFilterInputStream
An input stream that can have the close operation disabled (to avoid accidentally being closed). This is necessary, for example, when an input stream needs to be marked-and-reset multiple times but only as long as the input stream has not been closed. To survive not being accidentally closed, the close method can be disabled via disableClose().

The creator of this input stream should therefore always call release() in a finally block to truly release the underlying resources.

See Also:
  • Method Details

    • wrap

      public static ReleasableInputStream wrap(InputStream is)
      Wraps the given input stream into a ReleasableInputStream if necessary. Note if the given input stream is a FileInputStream, a ResettableInputStream which is a specific subclass of ReleasableInputStream will be returned.
    • close

      public final void close()
      If closeDisabled is false, closes this input stream and releases any system resources associated with the stream. Otherwise, this method does nothing.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class SdkFilterInputStream
    • release

      public final void release()
      Closes the underlying stream file and releases any system resources associated.
      Specified by:
      release in interface Releasable
      Overrides:
      release in class SdkFilterInputStream
    • isCloseDisabled

      public final boolean isCloseDisabled()
      Returns true if the close method has been disabled; false otherwise. Once the close method is disabled, caller would be responsible to release resources via release().
    • disableClose

      public final <T extends ReleasableInputStream> T disableClose()
      Used to disable the close method. Once the close method is disabled, caller would be responsible to release resources via release().