Methods Summary |
---|
public static java.nio.ByteBuffer | allocateDirect(int capacity)Allocates a new direct byte buffer.
The new buffer's position will be zero, its limit will be
its capacity, and its mark will be undefined. Whether or not it
has a backing array is unspecified. For JSR 239, the mark
is undefined, and no backing array will be present..
if (capacity < 0) {
throw new IllegalArgumentException();
}
int nativeAddress = ByteBufferImpl._allocNative(capacity);
ByteBuffer buf = new ByteBufferImpl(capacity, null, nativeAddress,
null /*directParent is null if direct buffer is a parent itself*/);
// Record the address of this buffer along with a weak
// reference; if the weak reference becomes null,
// we will free the native heap memory.
BufferManager.newBuffer(buf, nativeAddress);
return buf;
|
public final byte[] | array()Returns the byte array that backs this
buffer (optional operation).
Modifications to this buffer's content will cause the returned
array's content to be modified, and vice versa.
Invoke the {@link #hasArray hasArray} method before
invoking this method in order to ensure that this buffer has an
accessible backing array.
if (isDirect) {
throw new UnsupportedOperationException();
}
return array;
|
public final int | arrayOffset()Returns the offset within this buffer's backing array of the
first element of the buffer (optional
operation).
If this buffer is backed by an array then buffer position
p corresponds to array index
p + arrayOffset().
Invoke the {@link #hasArray hasArray} method before
invoking this method in order to ensure that this buffer has an
accessible backing array.
if (isDirect) {
throw new UnsupportedOperationException();
}
return arrayOffset;
|
public abstract java.nio.FloatBuffer | asFloatBuffer()Creates a view of this byte buffer as a float buffer.
The content of the new buffer will start at this buffer's
current position. Changes to this buffer's content will be
visible in the new buffer, and vice versa; the two buffers'
position, limit, and mark values will be independent. JSR
239 does not support the mark.
The new buffer's position will be zero, its capacity and
its limit will be the number of bytes remaining in this buffer
divided by four, and its mark will be undefined. The new buffer
will be direct if, and only if, this buffer is direct, and it
will be read-only if, and only if, this buffer is read-only.
JSR 239 does not support the mark or read-only
buffers.
|
public abstract java.nio.IntBuffer | asIntBuffer()Creates a view of this byte buffer as an int buffer.
The content of the new buffer will start at this buffer's
current position. Changes to this buffer's content will be
visible in the new buffer, and vice versa; the two buffers'
position, limit, and mark values will be independent. JSR
239 does not support the mark.
The new buffer's position will be zero, its capacity and
its limit will be the number of bytes remaining in this buffer
divided by four, and its mark will be undefined. The new buffer
will be direct if, and only if, this buffer is direct, and it
will be read-only if, and only if, this buffer is read-only.
JSR 239 does not support the mark or read-only
buffers.
|
public abstract java.nio.ShortBuffer | asShortBuffer()Creates a view of this byte buffer as a short buffer.
The content of the new buffer will start at this buffer's
current position. Changes to this buffer's content will be
visible in the new buffer, and vice versa; the two buffers'
position, limit, and mark values will be independent. JSR
239 does not support the mark.
The new buffer's position will be zero, its capacity and
its limit will be the number of bytes remaining in this buffer
divided by two, and its mark will be undefined. The new buffer
will be direct if, and only if, this buffer is direct, and it
will be read-only if, and only if, this buffer is read-only.
JSR 239 does not support the mark or read-only
buffers.
|
public int | compareTo(java.lang.Object ob)Compares this buffer to another.
Two byte buffers are compared by comparing their sequences of
remaining elements lexicographically, without regard to the starting
position of each sequence within its corresponding buffer.
A byte buffer is not comparable to any other type of object.
ByteBuffer that = (ByteBuffer)ob;
int n = this.position() + Math.min(this.remaining(), that.remaining());
for (int i = this.position(), j = that.position(); i < n; i++, j++) {
byte v1 = this.get(i);
byte v2 = that.get(j);
if (v1 == v2)
continue;
if ((v1 != v1) && (v2 != v2)) // For float and double
continue;
if (v1 < v2)
return -1;
return +1;
}
return this.remaining() - that.remaining();
|
public boolean | equals(java.lang.Object ob)Tells whether or not this buffer is equal to another object.
Two byte buffers are equal if, and only if,
They have the same element type,
They have the same number of remaining elements, and
The two sequences of remaining elements, considered
independently of their starting positions, are pointwise equal.
A byte buffer is not equal to any other type of object.
if (!(ob instanceof ByteBuffer))
return false;
ByteBuffer that = (ByteBuffer)ob;
if (this.remaining() != that.remaining())
return false;
int p = this.position();
for (int i = this.limit() - 1, j = that.limit() - 1; i >= p; i--, j--) {
byte v1 = this.get(i);
byte v2 = that.get(j);
if (v1 != v2) {
if ((v1 != v1) && (v2 != v2)) // For float and double
continue;
return false;
}
}
return true;
|
public java.nio.ByteBuffer | get(byte[] dst, int offset, int length)Relative bulk get method.
This method transfers bytes from this buffer into the
given destination array. If there are fewer bytes
remaining in the buffer than are required to satisfy the
request, that is, if
length > remaining(),
then no bytes are transferred and a {@link
BufferUnderflowException} is thrown.
Otherwise, this method copies length bytes
from this buffer into the given array, starting at the current
position of this buffer and at the given offset in the array.
The position of this buffer is then incremented by
length.
In other words, an invocation of this method of the form
src.get(dst, off, len) has exactly the same
effect as the loop
for (int i = off; i < off + len; i++)
dst[i] = src.get();
except that it first checks that there are sufficient
bytes in this buffer and it is potentially much more
efficient.
if (offset < 0 || offset > dst.length ||
length < 0 || length > dst.length - offset) {
throw new IndexOutOfBoundsException();
}
if (limit - position < length) {
throw new BufferUnderflowException();
}
if (isDirect) {
ByteBufferImpl._getBytes(arrayOffset + position,
dst, offset, length);
} else {
System.arraycopy(array, arrayOffset + position,
dst, offset, length);
}
position += length;
return this;
|
public java.nio.ByteBuffer | get(byte[] dst)Relative bulk get method.
This method transfers bytes from this buffer into the
given destination array. An invocation of this method of the
form src.get(a) behaves in exactly the same way as the
invocation
src.get(a, 0, a.length)
return get(dst, 0, dst.length);
|
public abstract byte | get()Relative get method. Reads the byte at this
buffer's current position, and then increments the
position.
|
public abstract byte | get(int index)Absolute get method. Reads the byte at the given
index.
|
public abstract float | getFloat()Relative get method for reading a float value.
Reads the next four bytes at this buffer's current position,
composing them into a float value according to the current byte order,
and then increments the position by four.
|
public abstract float | getFloat(int index)Absolute get method for reading a float value.
Reads four bytes at the given index, composing them into a
float value according to the current byte order.
|
public abstract int | getInt()Relative get method for reading an int value.
Reads the next four bytes at this buffer's current position,
composing them into an int value according to the current byte order,
and then increments the position by four.
|
public abstract int | getInt(int index)Absolute get method for reading an int value.
Reads four bytes at the given index, composing them into a
int value according to the current byte order.
|
public abstract short | getShort()Relative get method for reading a short value.
Reads the next two bytes at this buffer's current position,
composing them into a short value according to the current byte order,
and then increments the position by two.
|
public abstract short | getShort(int index)Absolute get method for reading a short value.
Reads two bytes at the given index, composing them into a
short value according to the current byte order.
|
public final boolean | hasArray()Tells whether or not this buffer is backed by an accessible
byte array.
If this method returns true then the {@link
#array() array} and {@link #arrayOffset() arrayOffset} methods
may safely be invoked.
return !isDirect;
|
public int | hashCode()Returns the current hash code of this buffer.
The hash code of a byte buffer depends only upon its remaining
elements; that is, upon the elements from position() up to, and
including, the element at limit() - 1.
Because buffer hash codes are content-dependent, it is inadvisable
to use buffers as keys in hash maps or similar data structures unless it
is known that their contents will not change.
int h = 1;
int p = position();
for (int i = limit() - 1; i >= p; i--)
h = 31 * h + (int)get(i);
return h;
|
public abstract boolean | isDirect()Tells whether or not this byte buffer is direct.
|
public java.nio.ByteBuffer | put(java.nio.ByteBuffer src)Relative bulk put method (optional
operation).
This method transfers the bytes remaining in the
given source buffer into this buffer. If there are more
bytes remaining in the source buffer than in this buffer,
that is, if
src.remaining() > remaining(),
then no bytes are transferred and a {@link
BufferOverflowException} is thrown.
Otherwise, this method copies
n = src.remaining() bytes from
the given buffer into this buffer, starting at each buffer's
current position. The positions of both buffers are then
incremented by n.
In other words, an invocation of this method of the form
dst.put(src) has exactly the same effect as the loop
while (src.hasRemaining())
dst.put(src.get());
except that it first checks that there is sufficient space in
this buffer and it is potentially much more efficient.
if (src == this) {
throw new IllegalArgumentException();
}
ByteBufferImpl srci = (ByteBufferImpl)src;
int length = srci.limit - srci.position;
if (length > this.limit - this.position) {
throw new BufferOverflowException();
}
if (isDirect && srci.isDirect) {
ByteBufferImpl._copyBytes(srci.arrayOffset + srci.position,
this.arrayOffset + this.position,
length);
} else if (isDirect && !srci.isDirect) {
ByteBufferImpl._putBytes(this.arrayOffset + this.position,
srci.array,
srci.arrayOffset + srci.position,
length);
} else if (!isDirect && srci.isDirect) {
ByteBufferImpl._getBytes(srci.arrayOffset + srci.position,
this.array,
this.arrayOffset + this.position,
length);
} else if (!isDirect && !srci.isDirect) {
System.arraycopy(srci.array, srci.arrayOffset + srci.position,
this.array, this.arrayOffset + this.position,
length);
}
srci.position += length;
this.position += length;
return this;
|
public java.nio.ByteBuffer | put(byte[] src, int offset, int length)Relative bulk put method (optional
operation).
This method transfers bytes into this buffer from the
given source array. If there are more bytes to be copied
from the array than remain in this buffer, that is, if
length > remaining(),
then no bytes are transferred and a {@link
BufferOverflowException} is thrown.
Otherwise, this method copies length bytes
from the given array into this buffer, starting at the given
offset in the array and at the current position of this buffer.
The position of this buffer is then incremented by
length.
In other words, an invocation of this method of the form
dst.put(src, off, len) has exactly the same
effect as the loop
for (int i = off; i < off + len; i++)
dst.put(a[i]);
except that it first checks that there is sufficient space in
this buffer and it is potentially much more efficient.
// need revisit -- overlapping backing store?
if (offset < 0 || offset > src.length ||
length < 0 || length > src.length - offset) {
throw new IndexOutOfBoundsException();
}
if (length > limit - position) {
throw new BufferOverflowException();
}
if (isDirect) {
ByteBufferImpl._putBytes(arrayOffset + position,
src, offset, length);
} else {
System.arraycopy(src, offset,
array, arrayOffset + position, length);
}
position += length;
return this;
|
public final java.nio.ByteBuffer | put(byte[] src)Relative bulk put method (optional operation).
This method transfers the entire content of the given
source byte array into this buffer. An invocation of
this method of the form dst.put(a) behaves in exactly
the same way as the invocation
dst.put(a, 0, a.length)
return put(src, 0, src.length);
|
public abstract java.nio.ByteBuffer | put(byte b)Relative put method (optional
operation).
Writes the given byte into this buffer at the current
position, and then increments the position.
|
public abstract java.nio.ByteBuffer | put(int index, byte b)Absolute put method (optional operation).
Writes the given byte into this buffer at the given
index.
|
public abstract java.nio.ByteBuffer | putFloat(float value)Relative put method for writing a float
value (optional operation).
Writes four bytes containing the given float value, in the
current byte order, into this buffer at the current position, and then
increments the position by four.
|
public abstract java.nio.ByteBuffer | putFloat(int index, float value)Absolute put method for writing a float
value (optional operation).
Writes four bytes containing the given float value, in the
current byte order, into this buffer at the given index.
|
public abstract java.nio.ByteBuffer | putInt(int value)Relative put method for writing an int
value (optional operation).
Writes four bytes containing the given int value, in the
current byte order, into this buffer at the current position, and then
increments the position by four.
|
public abstract java.nio.ByteBuffer | putInt(int index, int value)Absolute put method for writing an int
value (optional operation).
Writes four bytes containing the given int value, in the
current byte order, into this buffer at the given index.
|
public abstract java.nio.ByteBuffer | putShort(short value)Relative put method for writing a short
value (optional operation).
Writes two bytes containing the given short value, in the
current byte order, into this buffer at the current position, and then
increments the position by two.
|
public abstract java.nio.ByteBuffer | putShort(int index, short value)Absolute put method for writing a short
value (optional operation).
Writes two bytes containing the given short value, in the
current byte order, into this buffer at the given index.
|
public abstract java.nio.ByteBuffer | slice()Creates a new byte buffer whose content is a shared
subsequence of this buffer's content.
The content of the new buffer will start at this buffer's
current position. Changes to this buffer's content will be
visible in the new buffer, and vice versa; the two buffers'
position, limit, and mark values will be independent. JSR
239 does not support the mark.
The new buffer's position will be zero, its capacity and
its limit will be the number of bytes remaining in this
buffer, and its mark will be undefined. The new buffer will be
direct if, and only if, this buffer is direct, and it will be
read-only if, and only if, this buffer is read-only. JSR
239 does not support the mark or read-only buffers.
|
public java.lang.String | toString()Returns a string summarizing the state of this buffer.
return "java.nio.ByteBuffer[" +
"pos=" + position() +
"lim=" + limit() +
"cap=" + capacity() +
"]";
|
public static java.nio.ByteBuffer | wrap(byte[] array, int offset, int length)Wraps a byte array into a buffer.
The new buffer will be backed by the the given byte array;
that is, modifications to the buffer will cause the array to be
modified and vice versa. The new buffer's capacity will be
array.length, its position will be offset,
its limit will be offset + length, and its mark will
be undefined. Its backing
array will be the given array, and its array
offset will be zero.
if (offset < 0 || offset > array.length ||
length < 0 || length > array.length - offset) {
throw new IndexOutOfBoundsException();
}
ByteBufferImpl bbi = new ByteBufferImpl(array.length, array, 0,
null /*directParent is null for all nondirect buffers*/);
bbi.position(offset);
bbi.limit(offset + length);
return bbi;
|
public static java.nio.ByteBuffer | wrap(byte[] array)Wraps a byte array into a buffer.
The new buffer will be backed by the the given byte array;
that is, modifications to the buffer will cause the array to be
modified and vice versa. The new buffer's capacity and limit
will be array.length, its position will be zero, and
its mark will be undefined. Its backing
array will be the given array, and its array
offset will be zero.
return wrap(array, 0, array.length);
|