88 lines
2.5 KiB
Java
88 lines
2.5 KiB
Java
|
An example of using ByteBuffer
|
||
|
|
||
|
public static void main(String[] args)
|
||
|
{
|
||
|
// Create a ByteBuffer using a byte array
|
||
|
byte[] bytes = new byte[10];
|
||
|
ByteBuffer buf = ByteBuffer.wrap(bytes);
|
||
|
|
||
|
// Create a non-direct ByteBuffer with a 10 byte capacity
|
||
|
// The underlying storage is a byte array.
|
||
|
buf = ByteBuffer.allocate(10);
|
||
|
|
||
|
// Create a direct (memory-mapped) ByteBuffer with a 10 byte capacity.
|
||
|
buf = ByteBuffer.allocateDirect(10);
|
||
|
|
||
|
// Get the ByteBuffer's capacity
|
||
|
int capacity = bbuf.capacity(); // 10
|
||
|
|
||
|
// Use the absolute get(). This method does not affect the position.
|
||
|
byte b = bbuf.get(5); // position=0
|
||
|
|
||
|
// Set the position
|
||
|
bbuf.position(5);
|
||
|
|
||
|
// Use the relative get()
|
||
|
b = bbuf.get();
|
||
|
|
||
|
// Get the new position
|
||
|
int pos = bbuf.position(); // 6
|
||
|
|
||
|
// Get remaining byte count
|
||
|
int rem = bbuf.remaining(); // 4
|
||
|
|
||
|
// Set the limit
|
||
|
bbuf.limit(7); // remaining=1
|
||
|
|
||
|
// This convenience method sets the position to 0
|
||
|
bbuf.rewind(); // remaining=7
|
||
|
|
||
|
// Use the absolute put(). This method does not affect the position.
|
||
|
bbuf.put((byte)0xFF); // position=0
|
||
|
|
||
|
// Use the relative put()
|
||
|
bbuf.put((byte)0xFF);
|
||
|
|
||
|
// This convenience method sets the position to 0
|
||
|
bbuf.rewind(); // remaining=7
|
||
|
|
||
|
|
||
|
/*
|
||
|
Use ByteBuffer to store Strings
|
||
|
*/
|
||
|
// Create a character ByteBuffer
|
||
|
CharBuffer cbuf = buf.asCharBuffer();
|
||
|
|
||
|
// Write a string
|
||
|
cbuf.put("str");
|
||
|
|
||
|
// Convert character ByteBuffer to a string.
|
||
|
// Uses characters between current position and limit so flip it first
|
||
|
cbuf.flip();
|
||
|
String s = cbuf.toString(); // str Does not affect position
|
||
|
|
||
|
// Get a substring
|
||
|
int start = 2; // start is relative to cbuf's current position
|
||
|
int end = 5;
|
||
|
CharSequence sub = cbuf.subSequence(start, end); // str
|
||
|
|
||
|
/*
|
||
|
Set Byte Ordering for a ByteBuffer
|
||
|
*/
|
||
|
// Get default byte ordering
|
||
|
ByteOrder order = buf.order(); // ByteOrder.BIG_ENDIAN
|
||
|
|
||
|
// Put a multibyte value
|
||
|
buf.putShort(0, (short)123);
|
||
|
buf.get(0); // 0
|
||
|
buf.get(1); // 123
|
||
|
|
||
|
// Set to little endian
|
||
|
buf.order(ByteOrder.LITTLE_ENDIAN);
|
||
|
|
||
|
// Put a multibyte value
|
||
|
buf.putShort(0, (short)123);
|
||
|
buf.get(0); // 123
|
||
|
buf.get(1); // 0
|
||
|
}
|