See: Description
Interface | Description |
---|---|
Buffer |
Most data is shuffled around inside Vert.x using buffers.
|
buffer()
methods.
Buffers can be initialised from strings or byte arrays, or empty buffers can be created.
Here are some examples of creating buffers:
Create a new empty buffer:
[source,$lang]
----
examples.BufferExamples#example1
----
Create a buffer from a String. The String will be encoded in the buffer using UTF-8.
[source,$lang]
----
examples.BufferExamples#example2
----
Create a buffer from a String: The String will be encoded using the specified encoding, e.g:
[source,$lang]
----
examples.BufferExamples#example3
----
include::override/buffer_from_bytes.adoc[]
Create a buffer with an initial size hint. If you know your buffer will have a certain amount of data written to it
you can create the buffer and specify this size. This makes the buffer initially allocate that much memory and is
more efficient than the buffer automatically resizing multiple times as data is written to it.
Note that buffers created this way *are empty*. It does not create a buffer filled with zeros up to the specified size.
[source,$lang]
----
examples.BufferExamples#example5
----
=== Writing to a Buffer
There are two ways to write to a buffer: appending, and random access.
In either case buffers will always expand automatically to encompass the bytes. It's not possible to get
an IndexOutOfBoundsException
with a buffer.
==== Appending to a Buffer
To append to a buffer, you use the appendXXX
methods.
Append methods exist for appending various different types.
The return value of the appendXXX
methods is the buffer itself, so these can be chained:
[source,$lang]
----
examples.BufferExamples#example6
----
==== Random access buffer writes
You can also write into the buffer at a specific index, by using the setXXX
methods.
Set methods exist for various different data types. All the set methods take an index as the first argument - this
represents the position in the buffer where to start writing the data.
The buffer will always expand as necessary to accommodate the data.
[source,$lang]
----
examples.BufferExamples#example7
----
=== Reading from a Buffer
Data is read from a buffer using the getXXX
methods. Get methods exist for various datatypes.
The first argument to these methods is an index in the buffer from where to get the data.
[source,$lang]
----
examples.BufferExamples#example8
----
=== Working with unsigned numbers
Unsigned numbers can be read from or appended/set to a buffer with the getUnsignedXXX
,
appendUnsignedXXX
and setUnsignedXXX
methods. This is useful when implementing a codec for a
network protocol optimized to minimize bandwidth consumption.
In the following example, value 200 is set at specified position with just one byte:
[source,$lang]
----
examples.BufferExamples#example9
----
The console shows '200'.
=== Buffer length
Use length()
to obtain the length of the buffer.
The length of a buffer is the index of the byte in the buffer with the largest index + 1.
=== Copying buffers
Use copy()
to make a copy of the buffer
=== Slicing buffers
A sliced buffer is a new buffer which backs onto the original buffer, i.e. it does not copy the underlying data.
Use slice()
to create a sliced buffers
=== Buffer re-use
After writing a buffer to a socket or other similar place, they cannot be re-used.Copyright © 2018 Eclipse. All rights reserved.