Package org.restlet.representation
Class BufferingRepresentation
- java.lang.Object
-
- org.restlet.representation.Variant
-
- org.restlet.representation.RepresentationInfo
-
- org.restlet.representation.Representation
-
- org.restlet.util.WrapperRepresentation
-
- org.restlet.representation.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
-
-
Field Summary
-
Fields inherited from class org.restlet.representation.Representation
UNKNOWN_SIZE
-
-
Constructor Summary
Constructors Constructor Description BufferingRepresentation(Representation bufferedRepresentation)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description longgetAvailableSize()Returns the size effectively available.protected byte[]getBuffer()Returns the buffered content as an array of bytes.java.nio.channels.ReadableByteChannelgetChannel()Returns a channel with the representation's content.
If it is supported by a file, a read-only instance of FileChannel is returned.
This method is ensured to return a fresh channel for each invocation unless it is a transient representation, in which case null is returned.java.io.ReadergetReader()Returns a characters reader with the representation's content.longgetSize()Returns the total size in bytes if known, UNKNOWN_SIZE (-1) otherwise.java.io.InputStreamgetStream()Returns a stream with the representation's content.java.lang.StringgetText()Converts the representation to a string value.booleanisAvailable()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.protected booleanisBuffered()Indicates if the wrapped entity has been already buffered.protected voidsetBuffer(byte[] buffer)Sets the buffered content as an array of bytes.protected voidsetBuffered(boolean buffered)Indicates if the wrapped entity has been already buffered.voidwrite(java.io.OutputStream outputStream)Writes the representation to a byte stream.voidwrite(java.io.Writer writer)Writes the representation to a characters writer.voidwrite(java.nio.channels.WritableByteChannel writableChannel)Writes the representation to a byte channel.-
Methods inherited from class org.restlet.util.WrapperRepresentation
exhaust, getCharacterSet, getDigest, getDisposition, getEncodings, getExpirationDate, getLanguages, getLocationRef, getMediaType, getModificationDate, getRange, getTag, getWrappedRepresentation, isTransient, release, setAvailable, setCharacterSet, setDigest, setDisposition, setEncodings, setExpirationDate, setLanguages, setLocationRef, setLocationRef, setMediaType, setModificationDate, setRange, setSize, setTag, setTransient
-
Methods inherited from class org.restlet.representation.Representation
append, hasKnownSize, isEmpty
-
Methods inherited from class org.restlet.representation.Variant
createClientInfo, equals, hashCode, includes, isCompatible, toString
-
-
-
-
Constructor Detail
-
BufferingRepresentation
public BufferingRepresentation(Representation bufferedRepresentation)
Constructor.- Parameters:
bufferedRepresentation- The representation to buffer.
-
-
Method Detail
-
getAvailableSize
public long getAvailableSize()
Description copied from class:RepresentationReturns the size effectively available. This returns the same value asRepresentation.getSize()if no range is defined, otherwise it returns the size of the range usingRange.getSize().- Overrides:
getAvailableSizein classWrapperRepresentation- 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.
-
getChannel
public java.nio.channels.ReadableByteChannel getChannel() throws java.io.IOExceptionDescription copied from class:RepresentationReturns a channel with the representation's content.
If it is supported by a file, a read-only instance of FileChannel is returned.
This method is ensured to return a fresh channel for each invocation unless it is a transient representation, in which case null is returned.- Overrides:
getChannelin classWrapperRepresentation- Returns:
- A channel with the representation's content.
- Throws:
java.io.IOException
-
getReader
public java.io.Reader getReader() throws java.io.IOExceptionDescription copied from class:RepresentationReturns a characters 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:
getReaderin classWrapperRepresentation- Returns:
- A reader with the representation's content.
- Throws:
java.io.IOException
-
getSize
public long getSize()
Description copied from class:RepresentationReturns 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 theRepresentation.getAvailableSize()method.
Note that when used with HTTP connectors, this property maps to the "Content-Length" header.- Overrides:
getSizein classWrapperRepresentation- Returns:
- The size in bytes if known, UNKNOWN_SIZE (-1) otherwise.
- See Also:
Representation.isEmpty()
-
getStream
public java.io.InputStream getStream() throws java.io.IOExceptionDescription copied from class:RepresentationReturns 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:
getStreamin classWrapperRepresentation- Returns:
- A stream with the representation's content.
- Throws:
java.io.IOException
-
getText
public java.lang.String getText() throws java.io.IOExceptionDescription copied from class:RepresentationConverts 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:
getTextin classWrapperRepresentation- Returns:
- The representation as a string value.
- Throws:
java.io.IOException
-
isAvailable
public boolean isAvailable()
Description copied from class:RepresentationIndicates 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:
isAvailablein classWrapperRepresentation- 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(java.io.OutputStream outputStream) throws java.io.IOExceptionDescription copied from class:RepresentationWrites 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 givenOutputStreamafter writing to it as this will be handled by the Restlet connectors automatically.- Overrides:
writein classWrapperRepresentation- Parameters:
outputStream- The output stream.- Throws:
java.io.IOException
-
write
public void write(java.nio.channels.WritableByteChannel writableChannel) throws java.io.IOExceptionDescription copied from class:RepresentationWrites the representation to a byte channel. 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.- Overrides:
writein classWrapperRepresentation- Parameters:
writableChannel- A writable byte channel.- Throws:
java.io.IOException
-
write
public void write(java.io.Writer writer) throws java.io.IOExceptionDescription copied from class:RepresentationWrites 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 givenWriterafter writing to it as this will be handled by the Restlet connectors automatically.- Overrides:
writein classWrapperRepresentation- Parameters:
writer- The characters writer.- Throws:
java.io.IOException
-
-