konvertieren LongBuffer/IntBuffer/ShortBuffer zu ByteBuffer
Ich kenne einen schnellen Weg, um konvertieren von byte/short/int/long array zu ByteBuffer, und erhalten dann ein byte-array. Beispielsweise konvertiert ein byte-array zu kurze Arrays, die ich tun kann:
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);
erzeugt einen kurzen array wie dieses: [256, 0, 0, 0, 256, 0, 0, 0]
.
Wie kann ich die inverse operation mit java.nio Klassen?
Jetzt bin ich dabei dies:
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();
Und ich erhalten die original [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
byte-array. Aber ich will eine Methode wie ShortBuffer.asByteBuffer(), keine manuelle Schleife, um es zu tun.
Habe ich eine gefunden Anfrage an Sun 2001aber Sie wollten es nicht annehmen ;-((
InformationsquelleAutor der Frage logoff | 2012-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist das? :
Dann
bb
Ihre Daten enthält.Vollständigen code:
InformationsquelleAutor der Antwort A.H.
Ich würde erinnere mich an die ByteBuffer benutzt du zum erstellen der ShortBuffer aus, als sein Blick auf den gleichen Puffer.
Ansonsten scheint es der einzige Weg, um diese wieder zu verwenden, Reflexionen, um die
bb
Feld.BTW: die Verwendung eines direct ByteBuffer kann wesentlich schneller sein, je nach dem, was du tust, esp, wenn Sie nutzen die native byte-Reihenfolge.
InformationsquelleAutor der Antwort Peter Lawrey
Gut, in der Erklärung
AFAIK, Ihre
ShortBuffer
ist nur eine Ansicht von der ursprünglichenByteBuffer
. So konnten Sie immer auf die ursprünglicheByteBuffer
variablebb
und die Daten als modifiziert durch IhreCharBuffer
Referenzsb
.In der Dokumentation für asCharBuffer sagt:
InformationsquelleAutor der Antwort Edwin Dalorzo