Class AbstractStreamingDataHandler

  • All Implemented Interfaces:
    Closeable, AutoCloseable
    Direct Known Subclasses:
    DataSourceStreamingDataHandler

    public abstract class AbstractStreamingDataHandler
    extends jakarta.activation.DataHandler
    implements Closeable
    DataHandler extended to offer better buffer management in a streaming environment.
    DataHandler is used commonly as a data format across multiple systems (such as JAXB/WS.) Unfortunately, DataHandler has the semantics of "read as many times as you want", so this makes it difficult for involving parties to handle a BLOB in a streaming fashion.
    AbstractStreamingDataHandler solves this problem by offering methods that enable faster bulk "consume once" read operation.
    Author:
    Jitendra Kotamraju, Philip Helger
    • Constructor Detail

      • AbstractStreamingDataHandler

        public AbstractStreamingDataHandler​(@Nonnull
                                            URL aUrl)
      • AbstractStreamingDataHandler

        public AbstractStreamingDataHandler​(@Nonnull
                                            jakarta.activation.DataSource aDataSource)
    • Method Detail

      • readOnce

        @Nonnull
        public abstract InputStream readOnce()
                                      throws IOException
        Works like DataHandler.getInputStream() except that this method can be invoked only once.
        This is used as a signal from the caller that there will be no further DataHandler.getInputStream() invocation nor readOnce() invocation on this object (which would result in IOException.)
        When DataHandler is backed by a streaming BLOB (such as an attachment in a web service read from the network), this allows the callee to avoid unnecessary buffering.
        Note that it is legal to call DataHandler.getInputStream() multiple times and then call readOnce() afterward. Streams created such a way can be read in any order - there's no requirement that streams created earlier must be read first.
        Returns:
        always non-null. Represents the content of this BLOB. The returned stream is generally not buffered, so for better performance read in a big batch or wrap this into BufferedInputStream.
        Throws:
        IOException - if any i/o error