Class BufferingRepresentation


public class BufferingRepresentation extends WrapperRepresentation
Representation capable of buffering the wrapped representation. This is useful when you want to prevent chunk encoding from being used for dynamic representations or when you want to reuse a transient representation several times.

Be careful as this class could create potentially very large byte buffers in memory that could impact your application performance.
Author:
Thierry Boileau
  • Constructor Details

    • BufferingRepresentation

      public BufferingRepresentation(Representation bufferedRepresentation)
      Constructor.
      Parameters:
      bufferedRepresentation - The representation to buffer.
  • Method Details

    • getAvailableSize

      public long getAvailableSize()
      Description copied from class: Representation
      Returns the size effectively available. This returns the same value as Representation.getSize() if no range is defined, otherwise it returns the size of the range using Range.getSize().
      Overrides:
      getAvailableSize in class WrapperRepresentation
      Returns:
      The available size.
    • getBuffer

      protected byte[] getBuffer()
      Returns the buffered content as an array of bytes.
      Returns:
      The buffered content as an array of bytes.
    • getReader

      public Reader getReader() throws IOException
      Description copied from class: Representation
      Returns a character reader with the representation's content. This method is ensured to return a fresh reader for each invocation unless it is a transient representation, in which case null is returned. If the representation has no character set defined, the system's default one will be used.
      Overrides:
      getReader in class WrapperRepresentation
      Returns:
      A reader with the representation's content.
      Throws:
      IOException
    • getSize

      public long getSize()
      Description copied from class: Representation
      Returns the total size in bytes if known, UNKNOWN_SIZE (-1) otherwise. When ranges are used, this might not be the actual size available. For this purpose, you can use the Representation.getAvailableSize() method.

      Note that when used with HTTP connectors, this property maps to the "Content-Length" header.
      Overrides:
      getSize in class WrapperRepresentation
      Returns:
      The size in bytes if known, UNKNOWN_SIZE (-1) otherwise.
      See Also:
    • getStream

      public InputStream getStream() throws IOException
      Description copied from class: Representation
      Returns a stream with the representation's content. This method is ensured to return a fresh stream for each invocation unless it is a transient representation, in which case null is returned.
      Overrides:
      getStream in class WrapperRepresentation
      Returns:
      A stream with the representation's content.
      Throws:
      IOException
    • getText

      public String getText() throws IOException
      Description copied from class: Representation
      Converts the representation to a string value. Be careful when using this method as the conversion of large content to a string fully stored in memory can result in OutOfMemoryErrors being thrown.
      Overrides:
      getText in class WrapperRepresentation
      Returns:
      The representation as a string value.
      Throws:
      IOException
    • isAvailable

      public boolean isAvailable()
      Description copied from class: Representation
      Indicates if some fresh content is potentially available, without having to actually call one of the content manipulation method like getStream() that would actually consume it. Note that when the size of a representation is 0 is a not considered available. However, sometimes the size isn't known until a read attempt is made, so availability doesn't guarantee a non empty content.

      This is especially useful for transient representation whose content can only be accessed once and also when the size of the representation is not known in advance.
      Overrides:
      isAvailable in class WrapperRepresentation
      Returns:
      True if some fresh content is available.
    • isBuffered

      protected boolean isBuffered()
      Indicates if the wrapped entity has been already buffered.
      Returns:
      True if the wrapped entity has been already buffered.
    • setBuffer

      protected void setBuffer(byte[] buffer)
      Sets the buffered content as an array of bytes.
      Parameters:
      buffer - The buffered content as an array of bytes.
    • setBuffered

      protected void setBuffered(boolean buffered)
      Indicates if the wrapped entity has been already buffered.
      Parameters:
      buffered - True if the wrapped entity has been already buffered.
    • write

      public void write(OutputStream outputStream) throws IOException
      Description copied from class: Representation
      Writes the representation to a byte stream. This method is ensured to write the full content for each invocation unless it is a transient representation, in which case an exception is thrown.

      Note that the class implementing this method shouldn't flush or close the given OutputStream after writing to it as this will be handled by the Restlet connectors automatically.
      Overrides:
      write in class WrapperRepresentation
      Parameters:
      outputStream - The output stream.
      Throws:
      IOException
    • write

      public void write(Writer writer) throws IOException
      Description copied from class: Representation
      Writes the representation to a characters writer. This method is ensured to write the full content for each invocation unless it is a transient representation, in which case an exception is thrown.

      Note that the class implementing this method shouldn't flush or close the given Writer after writing to it as this will be handled by the Restlet connectors automatically.
      Overrides:
      write in class WrapperRepresentation
      Parameters:
      writer - The characters writer.
      Throws:
      IOException