Here I will show how to get bytes from a ByteBuffer. This isn’t as simple as it sounds. If you take the bytes with the method array() you will receive a byte array. But this isn’t what you want. (In most cases). With the array() method you will receive the internal byte array so you should have a look to the get() method. If you let fill your destination array with this method it should be what you expect.
I will show it on a sample with Charset.encode, this because older versions of Java ( <1.6 ) do not have a getBytes(Charset) method. (Yes I know, Java 5 is very old but there are some companies that can’t or won’t change the java version faster.)
The sample will use a utf-8 charset and encode some bytes, the result should be placed in a byte array.
Charset utf8Charset = Charset.forName("utf-8");
// Two special chars
char[] characters = { 0x222, 0x123 };
// Lets get a ByteBuffer
ByteBuffer encoded = utf8Charset.encode(new String(characters));
// create new byte[] with the nr of bytes
byte[] resultBuffer = new byte[encoded.remaining()];
// get the bytes
encoded.get(resultBuffer);
doSomeOtherStuff(resultBuffer);
This should give the same as
final char[] characters = { 0x222, 0x123 };
new String(characters).getBytes("utf-8");
If you compare the internal array with the one you receive with the both samples it looks like this:
internal | bytes
-56 | -56
-94 | -94
-60 | -60
-93 | -93
0 |