Package com.tangosol.io
Class MultiBufferReadBuffer
- java.lang.Object
-
- com.tangosol.util.Base
-
- com.tangosol.io.AbstractReadBuffer
-
- com.tangosol.io.MultiBufferReadBuffer
-
- All Implemented Interfaces:
ReadBuffer
,ByteSequence
,HashEncoded
,Cloneable
- Direct Known Subclasses:
ExternalizableHelper.DecoratedMultiBufferReadBuffer
public class MultiBufferReadBuffer extends AbstractReadBuffer
The MultiBufferReadBuffer is a ReadBuffer implementation that presents a view across any number of underlying ReadBuffer objects, as if they were appended end-to-end into a single ReadBuffer.- Author:
- cp 2006.04.15
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
MultiBufferReadBuffer.MultiBufferInput
An implementation of the BufferInput interface that is backed by a series of the underlying ReadBuffer BufferInput objects.-
Nested classes/interfaces inherited from class com.tangosol.io.AbstractReadBuffer
AbstractReadBuffer.AbstractBufferInput
-
Nested classes/interfaces inherited from class com.tangosol.util.Base
Base.LoggingWriter
-
Nested classes/interfaces inherited from interface com.tangosol.io.ReadBuffer
ReadBuffer.BufferInput
-
-
Field Summary
-
Fields inherited from class com.tangosol.io.AbstractReadBuffer
NO_BINARY, NO_BYTES
-
Fields inherited from class com.tangosol.util.Base
LOG_ALWAYS, LOG_CONFIG, LOG_DEBUG, LOG_ERR, LOG_INFO, LOG_MAX, LOG_MIN, LOG_QUIET, LOG_WARN, POWER_0, POWER_G, POWER_K, POWER_M, POWER_T, UNIT_D, UNIT_H, UNIT_M, UNIT_MS, UNIT_NS, UNIT_S, UNIT_US
-
Fields inherited from interface com.tangosol.util.HashEncoded
UNENCODED
-
-
Constructor Summary
Constructors Constructor Description MultiBufferReadBuffer(ReadBuffer[] abuf)
Construct a MultiBufferReadBuffer from an array of underlying ReadBuffer objects.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description byte
byteAt(int of)
Returns the byte at the specified offset.void
copyBytes(int ofBegin, int ofEnd, byte[] abDest, int ofDest)
Copies bytes from this ReadBuffer into the destination byte array.boolean
equals(Object o)
Compare two ReadBuffer objects for equality.protected ReadBuffer
getBuffer(int iBuffer)
Obtain the specified buffer.protected int
getBufferCount()
Determine the number of ReadBuffer objects that contain the data presented by this MultiBufferReadBuffer.protected int
getBufferIndexByOffset(int of)
Determine which underlying ReadBuffer contains the specified offset.protected int
getBufferOffset(int iBuffer)
Determine the offset of the specified buffer.ReadBuffer.BufferInput
getDestructiveBufferInput()
Return a self-destructing BufferInput over this Buffer.protected ReadBuffer.BufferInput
instantiateBufferInput()
Factory method: Instantiate a BufferInput object to read data from the ReadBuffer.protected ReadBuffer.BufferInput
instantiateBufferInput(boolean fDestructive)
Factory method: Instantiate a BufferInput object to read data from the ReadBuffer.protected ReadBuffer
instantiateReadBuffer(int of, int cb)
Factory method: Instantiate a ReadBuffer for a portion of this ReadBuffer.int
length()
Determine the length of the buffer.protected ReadBuffer
releaseBuffer(int iBuffer)
Release the specified buffer.Binary
toBinary(int of, int cb)
Return a Binary object that holds the specified portion of this ReadBuffer.byte[]
toByteArray(int of, int cb)
Get a portion of the contents of the ReadBuffer as a byte array.ByteBuffer
toByteBuffer()
Return a read-only ByteBuffer view of this ReadBuffer.ByteBuffer
toByteBuffer(int of, int cb)
Return a read-only ByteBuffer view of the specified portion of this ReadBuffer.void
writeTo(DataOutput out)
Write the contents of this ReadBuffer to a DataOutput.void
writeTo(DataOutput out, int of, int cb)
Write the contents of this ReadBuffer to a DataOutput.void
writeTo(OutputStream out)
Write the contents of this ReadBuffer to an OutputStream.void
writeTo(OutputStream out, int of, int cb)
Write the contents of the ReadBuffer to an OutputStream.void
writeTo(ByteBuffer buf)
Write the contents of the Binary object to a ByteBuffer.void
writeTo(ByteBuffer buf, int of, int cb)
Write the contents of the Binary object to a ByteBuffer.-
Methods inherited from class com.tangosol.io.AbstractReadBuffer
checkBounds, clone, getBufferInput, getEncodedHash, getReadBuffer, readPackedInt, readUnsignedByte, sizeofPackedInt, subSequence, toBinary, toByteArray
-
Methods inherited from class com.tangosol.util.Base
azzert, azzert, azzert, azzertFailed, breakLines, breakLines, capitalize, checkNotEmpty, checkNotNull, checkRange, computeSafeWaitTime, decimalValue, dup, dup, ensureBigDecimal, ensureClassLoader, ensureRuntimeException, ensureRuntimeException, equals, equalsDeep, err, err, err, err, err, escape, formatDateTime, getCallerStackFrame, getCommonMonitor, getCommonMonitor, getCommonMonitor, getContextClassLoader, getContextClassLoader, getDeepMessage, getErr, getLastSafeTimeMillis, getLog, getMaxDecDigits, getMaxHexDigits, getOriginalException, getOut, getProcessRandom, getRandom, getRandomBinary, getRandomBinary, getRandomString, getSafeTimeMillis, getStackFrame, getStackFrames, getStackTrace, getStackTrace, getStackTrace, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, mergeArray, mergeBooleanArray, mergeByteArray, mergeCharArray, mergeDoubleArray, mergeFloatArray, mergeIntArray, mergeLongArray, mod, mod, octalValue, out, out, out, out, out, pad, parseBandwidth, parseBandwidth, parseDelimitedString, parseHex, parseHex, parseMemorySize, parseMemorySize, parsePercentage, parseTime, parseTime, parseTimeNanos, parseTimeNanos, printStackTrace, randomize, randomize, randomize, randomize, read, read, read, read, read, read, read, replace, setErr, setLog, setLogEcho, setOut, sleep, toBandwidthString, toBandwidthString, toCharEscape, toCrc, toCrc, toCrc, toCrc, toCrc, toDecString, toDelimitedString, toDelimitedString, toDelimitedString, toDelimitedString, toHex, toHex, toHexDump, toHexEscape, toHexEscape, toHexEscape, toHexEscape, toHexString, toMemorySizeString, toMemorySizeString, toQuotedCharEscape, toQuotedStringEscape, toSqlString, toString, toString, toStringEscape, toUnicodeEscape, trace, trace, trace, trace, trace, trace, trace, trace, trace, truncateString, truncateString, wait
-
-
-
-
Constructor Detail
-
MultiBufferReadBuffer
public MultiBufferReadBuffer(ReadBuffer[] abuf)
Construct a MultiBufferReadBuffer from an array of underlying ReadBuffer objects.- Parameters:
abuf
- an array of ReadBuffer objects from which to construct this MultiBufferReadBuffer
-
-
Method Detail
-
getDestructiveBufferInput
public ReadBuffer.BufferInput getDestructiveBufferInput()
Return a self-destructing BufferInput over this Buffer. As the BufferInput is advanced the individual buffer segments will be released allowing them to potentially be garbage collected.- Returns:
- a destructed BufferInput
-
writeTo
public void writeTo(OutputStream out) throws IOException
Write the contents of this ReadBuffer to an OutputStream.- Parameters:
out
- an OutputStream to write to- Throws:
IOException
- if an I/O exception occurs
-
writeTo
public void writeTo(OutputStream out, int of, int cb) throws IOException
Write the contents of the ReadBuffer to an OutputStream.- Parameters:
out
- an OutputStream to write toof
- the beginning index, inclusivecb
- the number of bytes to write to an OutputStream- Throws:
IOException
- if an I/O exception occurs
-
writeTo
public void writeTo(DataOutput out) throws IOException
Write the contents of this ReadBuffer to a DataOutput.- Parameters:
out
- a DataOutput to write to- Throws:
IOException
- if an I/O exception occurs
-
writeTo
public void writeTo(DataOutput out, int of, int cb) throws IOException
Write the contents of this ReadBuffer to a DataOutput.- Parameters:
out
- a DataOutput to write toof
- the beginning index, inclusivecb
- the number of bytes to write to a DataOutput- Throws:
IOException
- if an I/O exception occurs
-
writeTo
public void writeTo(ByteBuffer buf)
Write the contents of the Binary object to a ByteBuffer.- Parameters:
buf
- a ByteBuffer to write to
-
writeTo
public void writeTo(ByteBuffer buf, int of, int cb) throws IOException
Write the contents of the Binary object to a ByteBuffer.- Parameters:
buf
- an ByteBuffer to write toof
- the beginning index, inclusivecb
- the number of bytes to write to a ByteBuffer- Throws:
IOException
- if an I/O exception occurs
-
length
public int length()
Determine the length of the buffer.- Returns:
- the number of bytes of data represented by this ReadBuffer
-
byteAt
public byte byteAt(int of)
Returns the byte at the specified offset. An offset ranges from0
tolength() - 1
. The first byte of the sequence is at offset0
, the next at offset1
, and so on, as for array indexing.- Parameters:
of
- the offset (index) of the byte- Returns:
- the byte at the specified offset in this ReadBuffer
-
copyBytes
public void copyBytes(int ofBegin, int ofEnd, byte[] abDest, int ofDest)
Copies bytes from this ReadBuffer into the destination byte array.The first byte to be copied is at offset
ofBegin
; the last byte to be copied is at offsetofEnd-1
(thus the total number of bytes to be copied isofEnd - ofBegin
). The bytes are copied into the sub-array ofabDest
starting at offsetofDest
and ending at index:ofDest + (ofEnd - ofBegin) - 1
This method is the ReadBuffer equivalent of
String.getChars(int, int, char[], int)
. It allows the caller to extract a chunk of bytes into the caller's own array.- Parameters:
ofBegin
- offset of the first byte in the ReadBuffer to copyofEnd
- offset after the last byte in the ReadBuffer to copyabDest
- the destination byte arrayofDest
- the offset in the destination byte array to copy the first byte to
-
toByteArray
public byte[] toByteArray(int of, int cb)
Get a portion of the contents of the ReadBuffer as a byte array.This method is an equivalent of
getReadBuffer(of, cb).toByteArray()
.- Specified by:
toByteArray
in interfaceReadBuffer
- Overrides:
toByteArray
in classAbstractReadBuffer
- Parameters:
of
- the beginning index, inclusivecb
- the number of bytes to include in the resulting byte[]- Returns:
- a byte[] containing the specified portion of this ReadBuffer
-
toBinary
public Binary toBinary(int of, int cb)
Return a Binary object that holds the specified portion of this ReadBuffer.This method is an equivalent of
getReadBuffer(of, cb).toBinary()
.- Specified by:
toBinary
in interfaceReadBuffer
- Overrides:
toBinary
in classAbstractReadBuffer
- Parameters:
of
- the beginning index, inclusivecb
- the number of bytes to include in the Binary object- Returns:
- a Binary object containing the specified portion of this ReadBuffer
-
toByteBuffer
public ByteBuffer toByteBuffer()
Return a read-only ByteBuffer view of this ReadBuffer. This view may or may not reflect any subsequent changes made to the underlying content.- Returns:
- a read-only ByteBuffer view of this ReadBuffer
-
toByteBuffer
public ByteBuffer toByteBuffer(int of, int cb)
Return a read-only ByteBuffer view of the specified portion of this ReadBuffer. This view may or may not reflect any subsequent changes made to the underlying content.This method is an equivalent of
getReadBuffer(of, cb).toByteBuffer()
.- Parameters:
of
- the beginning index, inclusivecb
- the number of bytes to include in the ByteBuffer object- Returns:
- a read-only ByteBuffer view of the specified portion of this ReadBuffer
-
equals
public boolean equals(Object o)
Compare two ReadBuffer objects for equality.- Specified by:
equals
in interfaceReadBuffer
- Overrides:
equals
in classAbstractReadBuffer
- Parameters:
o
- a ReadBuffer object- Returns:
- true iff the other ReadBuffer is identical to this
-
instantiateReadBuffer
protected ReadBuffer instantiateReadBuffer(int of, int cb)
Factory method: Instantiate a ReadBuffer for a portion of this ReadBuffer.- Specified by:
instantiateReadBuffer
in classAbstractReadBuffer
- Parameters:
of
- the beginning index, inclusivecb
- the number of bytes to include in the resulting ReadBuffer- Returns:
- a ReadBuffer that represents a portion of this ReadBuffer
-
instantiateBufferInput
protected ReadBuffer.BufferInput instantiateBufferInput()
Factory method: Instantiate a BufferInput object to read data from the ReadBuffer.- Specified by:
instantiateBufferInput
in classAbstractReadBuffer
- Returns:
- a new BufferInput reading from this ReadBuffer
-
instantiateBufferInput
protected ReadBuffer.BufferInput instantiateBufferInput(boolean fDestructive)
Factory method: Instantiate a BufferInput object to read data from the ReadBuffer.- Parameters:
fDestructive
- true iff the BufferInput should self-destruct as it is advanced- Returns:
- a new BufferInput reading from this ReadBuffer
-
getBufferCount
protected int getBufferCount()
Determine the number of ReadBuffer objects that contain the data presented by this MultiBufferReadBuffer.- Returns:
- the count of underlying ReadBuffer objects
-
getBufferOffset
protected int getBufferOffset(int iBuffer)
Determine the offset of the specified buffer. The offset of a buffer is the absolute offset of the first byte stored in the buffer.- Parameters:
iBuffer
- an index 0 <= iBuffer < getBufferCount()- Returns:
- the absolute offset of the first byte of the specified ReadBuffer
-
getBuffer
protected ReadBuffer getBuffer(int iBuffer)
Obtain the specified buffer.- Parameters:
iBuffer
- an index 0 <= iBuffer < getBufferCount()- Returns:
- the specified ReadBuffer
-
releaseBuffer
protected ReadBuffer releaseBuffer(int iBuffer)
Release the specified buffer. Once released any operation requiring access to overall buffer segment maintained by said buffer will result in an error. This method allows for "destructive streaming", see #getDestructiveBufferInput()- Parameters:
iBuffer
- an index 0 <= iBuffer < getBufferCount()- Returns:
- the released buffer
-
getBufferIndexByOffset
protected int getBufferIndexByOffset(int of)
Determine which underlying ReadBuffer contains the specified offset.- Parameters:
of
- an offset into this MultiBufferReadBuffer- Returns:
- the index of the ReadBuffer containing the specified offset
-
-