Class AbstractStreamingDataHandler

java.lang.Object
jakarta.activation.DataHandler
com.helger.mail.datahandler.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 Summary

    Constructors
    Constructor
    Description
    AbstractStreamingDataHandler(jakarta.activation.DataSource aDataSource)
     
     
     
  • Method Summary

    Modifier and Type
    Method
    Description
     
    abstract InputStream
    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.
    void
    setHrefCid(String sHrefCid)
     

    Methods inherited from class jakarta.activation.DataHandler

    getAllCommands, getBean, getCommand, getContent, getContentType, getDataSource, getInputStream, getName, getOutputStream, getPreferredCommands, getTransferData, getTransferDataFlavors, isDataFlavorSupported, setCommandMap, setDataContentHandlerFactory, writeTo

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.io.Closeable

    close
  • Constructor Details

    • AbstractStreamingDataHandler

      public AbstractStreamingDataHandler(@Nonnull Object aObj, @Nonnull String sMimeType)
    • AbstractStreamingDataHandler

      public AbstractStreamingDataHandler(@Nonnull URL aUrl)
    • AbstractStreamingDataHandler

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

    • getHrefCid

      @Nullable public String getHrefCid()
    • setHrefCid

      public void setHrefCid(@Nullable String sHrefCid)
    • 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