Package org.simpleframework.util.buffer
Class BufferAllocator
java.lang.Object
org.simpleframework.util.buffer.FilterAllocator
org.simpleframework.util.buffer.BufferAllocator
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Allocator
,Buffer
,Stream
The
BufferAllocator
object is used to provide a means
to allocate buffers using a single underlying buffer. This uses a
buffer from a existing allocator to create the region of memory to
use to allocate all other buffers. As a result this allows a single
buffer to acquire the bytes in a number of associated buffers. This
has the advantage of allowing bytes to be read in sequence without
joining data from other buffers or allocating multiple regions.- Author:
- Niall Gallagher
-
Field Summary
Fields inherited from class org.simpleframework.util.buffer.FilterAllocator
capacity, limit, source
-
Constructor Summary
ConstructorsConstructorDescriptionBufferAllocator
(Allocator source) Constructor for theBufferAllocator
object.BufferAllocator
(Allocator source, int capacity) Constructor for theBufferAllocator
object.BufferAllocator
(Allocator source, int capacity, int limit) Constructor for theBufferAllocator
object. -
Method Summary
Modifier and TypeMethodDescriptionallocate()
This method is used to allocate a default buffer.allocate
(int size) This method is used to allocate a default buffer.append
(byte[] array) This method is used to append bytes to the end of the buffer.append
(byte[] array, int off, int size) This method is used to append bytes to the end of the buffer.void
clear()
This will clear all data from the buffer.void
close()
This method is used to ensure the buffer can be closed.encode()
This method is used to acquire the buffered bytes as a string.This method is used to acquire the buffered bytes as a string.This method is used so that a buffer can be represented as a stream of bytes.
-
Constructor Details
-
BufferAllocator
Constructor for theBufferAllocator
object. This is used to instantiate the allocator with a default buffer size of half a kilobyte. This ensures that it can be used for general purpose byte storage and for minor I/O tasks.- Parameters:
source
- this is where the underlying buffer is allocated
-
BufferAllocator
Constructor for theBufferAllocator
object. This is used to instantiate the allocator with a specified buffer size. This is typically used when a very specific buffer capacity is required, for example a request body with a known length.- Parameters:
source
- this is where the underlying buffer is allocatedcapacity
- the initial capacity of the allocated buffers
-
BufferAllocator
Constructor for theBufferAllocator
object. This is used to instantiate the allocator with a specified buffer size. This is typically used when a very specific buffer capacity is required, for example a request body with a known length.- Parameters:
source
- this is where the underlying buffer is allocatedcapacity
- the initial capacity of the allocated bufferslimit
- this is the maximum buffer size created by this
-
-
Method Details
-
getInputStream
This method is used so that a buffer can be represented as a stream of bytes. This provides a quick means to access the data that has been written to the buffer. It wraps the buffer within an input stream so that it can be read directly.- Specified by:
getInputStream
in interfaceStream
- Returns:
- a stream that can be used to read the buffered bytes
- Throws:
IOException
-
encode
This method is used to acquire the buffered bytes as a string. This is useful if the contents need to be manipulated as a string or transferred into another encoding. If the UTF-8 content encoding is not supported the platform default is used, however this is unlikely as UTF-8 should be supported.- Specified by:
encode
in interfaceBuffer
- Returns:
- this returns a UTF-8 encoding of the buffer contents
- Throws:
IOException
-
encode
This method is used to acquire the buffered bytes as a string. This is useful if the contents need to be manipulated as a string or transferred into another encoding. This will convert the bytes using the specified character encoding format.- Specified by:
encode
in interfaceBuffer
- Parameters:
charset
- this is the charset to encode the data with- Returns:
- this returns the encoding of the buffer contents
- Throws:
IOException
-
append
This method is used to append bytes to the end of the buffer. This will expand the capacity of the buffer if there is not enough space to accommodate the extra bytes.- Specified by:
append
in interfaceBuffer
- Parameters:
array
- this is the byte array to append to this buffer- Returns:
- this returns this buffer for another operation
- Throws:
IOException
-
append
This method is used to append bytes to the end of the buffer. This will expand the capacity of the buffer if there is not enough space to accommodate the extra bytes.- Specified by:
append
in interfaceBuffer
- Parameters:
array
- this is the byte array to append to this bufferoff
- this is the offset to begin reading the bytes fromsize
- the number of bytes to be read from the array- Returns:
- this returns this buffer for another operation
- Throws:
IOException
-
clear
This will clear all data from the buffer. This simply sets the count to be zero, it will not clear the memory occupied by the instance as the internal buffer will remain. This allows the memory occupied to be reused as many times as is required.- Specified by:
clear
in interfaceBuffer
- Throws:
IOException
-
close
This method is used to ensure the buffer can be closed. Once the buffer is closed it is an immutable collection of bytes and can not longer be modified. This ensures that it can be passed by value without the risk of modification of the bytes.- Specified by:
close
in interfaceAllocator
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceBuffer
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classFilterAllocator
- Throws:
IOException
-
allocate
This method is used to allocate a default buffer. This will allocate a buffer of predetermined size, allowing it to grow to an upper limit to accommodate extra data. If the buffer requested is larger than the limit an exception is thrown.- Specified by:
allocate
in interfaceAllocator
- Specified by:
allocate
in interfaceBuffer
- Overrides:
allocate
in classFilterAllocator
- Returns:
- this returns an allocated buffer with a default size
- Throws:
IOException
-
allocate
This method is used to allocate a default buffer. This will allocate a buffer of predetermined size, allowing it to grow to an upper limit to accommodate extra data. If the buffer requested is larger than the limit an exception is thrown.- Specified by:
allocate
in interfaceAllocator
- Overrides:
allocate
in classFilterAllocator
- Parameters:
size
- the initial capacity of the allocated buffer- Returns:
- this returns an allocated buffer with a default size
- Throws:
IOException
-