przekonwertować LongBuffer / IntBuffer / ShortBuffer do ByteBuffer
Znam szybki sposób na przekształcenie tablicy bajtów / krótkich / int / długich w ByteBuffer, a następnie uzyskanie tablicy bajtów. Na przykład, aby przekonwertować tablicę bajtów na krótką tablicę, mogę to zrobić:
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);
tworzy krótką tablicę w następujący sposób:[256, 0, 0, 0, 256, 0, 0, 0]
.
Jak mogę wykonać operację odwrotną za pomocąjava.nio klasy?
Teraz to robię:
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();
I otrzymuję oryginał[1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
tablica bajtów. Ale chcę użyć metody takiej jak ShortBuffer.asByteBuffer (), a nie ręcznej pętli, aby to zrobić.
Znalazłemprośba do Sun z 2001 roku, ale nie przyjęli tego; - ((