Я знаю быстрый способ преобразования массива byte/short/int/long в ByteBuffer, а затем получить массив байтов. Например, чтобы преобразовать массив байтов в короткий массив, я могу сделать:
byte[] bArray = { 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 };
ByteBuffer bb = ByteBuffer.wrap(byteArray);
ShortBuffer sb = bb.asShortBuffer();
short[] shortArray = new short[byteArray.length / 2];
sb.get(shortArray);
создает короткий массив следующим образом: [256, 0, 0, 0, 256, 0, 0, 0]
.
Как я могу выполнить обратную операцию с помощью классов java.nio?
Теперь я делаю это:
shortArray[] = {256, 0, 0, 0, 256, 0, 0, 0};
ByteBuffer bb = ByteBuffer.allocate(shortArray.length * 2);
for (short s : shortArray) {
bb.putShort(s);
}
return bb.array();
И я получаю исходный массив байтов [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
. Но я хочу использовать такой метод, как ShortBuffer.asByteBuffer(), а не ручной цикл для этого.
Я нашел запрос для Sun 2001 года, но они этого не приняли; - ((