SmartBuffer class
Contents
- Introduction to the Library
- Basic support package (com.kryptel.bslx)
- BooleanFlag class
- Conversions class
- Crc32 class
- SmartBuffer class
- Targets class
- Kryptel API Commons package (com.kryptel)
- Cipher package (com.kryptel.cipher)
- Compressor package (com.kryptel.compressor)
- Exceptions package (com.kryptel.exceptions)
- Hash function package (com.kryptel.hash_function)
- MAC function package (com.kryptel.mac)
- Key-related functions (com.kryptel.key)
- Silver Key engine (com.kryptel.silver_key)
- Kryptel encrypted storage (com.kryptel.storage)
Declaration
package com.kryptel.bslx; public class SmartBuffer { public SmartBuffer() public SmartBuffer(byte[] src, int start, int len) public synchronized int Size() public synchronized void Empty() public void Store(byte[] buf) public synchronized void Store(byte[] buf, int start, int len) public synchronized byte[] Retrieve(int len) public synchronized int Retrieve(byte[] buf, int start, int len) public synchronized void Unretrieve(byte[] buf, int start, int len) public synchronized int Peek(byte[] buf, int start, int len) public synchronized int SkipBytes(int len) public synchronized byte[] Merge() }
Description
This class implements a dynamic buffer to be used when data supplier and data consumer run independently, especially in different threads.
The data buffer is a linked set of smaller buffers, which get created and thrown away dynamically. See also Merge function.
Constructors
public SmartBuffer() public SmartBuffer(byte[] src, int start, int len)
The default constructor creates empty buffer; the second form stores the specified data.
Empty
public synchronized void Empty()
Empties the buffer by throwing away all the stored data.
Merge
public synchronized byte[] Merge()
Converts a linked list of buffer to one larger buffer containg the same data and return it. The length of the returned byte[] array is exactly the value that Size function returns.
Note that this function does not retrieves the data; it simply re-arranges the buffers.
Peek
public synchronized int Peek(byte[] buf, int start, int len)
Same as Retrieve except it does not remove the retrieved data from the buffer. Like Retrieve, this function returns the actual size of the retrieved data.
Retrieve
public synchronized byte[] Retrieve(int len)
Retrieves and returns the specified number of bytes from the buffer.
public synchronized int Retrieve(byte[] buf, int start, int len)
Retrieves data from the buffer, storing them in the buf array starting at start position. The len argument is the requested data size. The returned value is the actual size of the retrieved data.
Note that both the versions do not wait for the supplier to provide more data if there are less data than requested, the functions retrieve what is contained in the buffer; it is responsibility of the consumer to check the returned value and wait for more data if necessary.
Size
public synchronized int Size()
Returns the size of the data currently stored in the buffer.
SkipBytes
public synchronized int SkipBytes(int len)
Removes the specified number of bytes from the buffer. The number may be larger than the buffer size; in this case the buffer gets emptied.
Store
public void Store(byte[] buf) public synchronized void Store(byte[] buf, int start, int len)
Stores the specified data in the buffer, extending it if necessary. Note that the first form is also synchronized as it just a shortcut to the latter method, which actually does the job.
Unretrieve
public synchronized void Unretrieve(byte[] buf, int start, int len)
This function is similar to Store function except it inserts the data at the beginning of the buffer. The data bytes being inserted are not reversed – buf[start] will be the first byte of the updated buffer, that is, the byte buf[start + len - 1] will be unretrieved first, and buf[start] will be pushed last.